Swift'in # uyarı eşdeğeri var mı? Sadece Xcode'un kendi GUI'sinde bir uyarı göstermek için kullanılır
Ayrıca #error eşdeğeri olup olmadığıyla da ilgileniyorum.
Apple #Pragma işaretinin yakında çıkacağını söyledi, muhtemelen bununla aynı olabilir.
Swift'in # uyarı eşdeğeri var mı? Sadece Xcode'un kendi GUI'sinde bir uyarı göstermek için kullanılır
Ayrıca #error eşdeğeri olup olmadığıyla da ilgileniyorum.
Apple #Pragma işaretinin yakında çıkacağını söyledi, muhtemelen bununla aynı olabilir.
Yanıtlar:
Gelecekte, Apple geliştiricileri bir //WARNING:
dönüm noktasını çok iyi serbest bırakabilir veya başka bir adlandırılmış dönüm noktası için işlevsellik sağlayabilir.
Ancak bu işlevselliği Swift in Xcode ile bugün kullanmak için, Ben Dodson ve Jeffrey Sambells tarafından belirtildiği gibi şunları yapabilirsiniz:
Hedefinizin oluşturma aşamaları sekmesine yeni bir Çalışma Komut Dosyası ekleyin (proje ayarları> yapı aşamaları> '+'> yeni çalıştırma komut dosyası aşaması) ve aşağıdaki kodu boş kutuya yapıştırın:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
Bu, Xcode'u işaretlediğiniz herhangi bir yorum // TODO:
veya // FIXME:
yorum için derleme zamanında bir uyarıyı işaretlemeye zorlar .
Alternatif olarak, TAGS'ı özel bir etiketle değiştirebilirsiniz: TAGS="WARNING:"
yukarıdaki kodda TODO & FIXME için varsayılan davranışı koruyacak ve olarak işaretlenen yorumlarda derleme zamanı uyarısı oluşturacaktır // WARNING:
.
http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/ http://jeffreysambells.com/2013/01/31/generate-xcode- uyarılar-den-todo-yorumlarla
DÜZENLEME: 18/11/14
@ david-h yorumunda iyi bir noktaya değindi. Bu uyarıları yalnızca belirli bir derleme yapılandırmasında yükseltmek istiyorsanız, aşağıdakileri yapabilirsiniz:
if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
Alternatif olarak, yalnızca üretim yapılarını hedeflemek için "Hata Ayıkla" yerine "Yayınla" seçeneğini kullanabilirsiniz.
-type f
için find
komut seçeneği eklemek zorunda kaldı . Bu çoğu insan için bir sorun olmamalı, ancak R.swift
bölmeyi kullanan herkes sahip olduğum aynı hatayla karşılaşacak çünkü R.swift
bir dizin
Düzenle
Swift 4.2'den itibaren, hem derleme uyarıları hem de hatalar için dil düzeyinde destek mevcuttur.
#warning("Warning description")
#error("Throws a build error")
Orijinal Yanıt
Çabuk, kirli ve aynı anda çok zarif.
// Description of what you need to fix
var FIX_ME__🛠🛠🛠: AnyObject
'FIX_ME__🛠🛠🛠' ifadesinin hiç kullanılmadığına dair bir uyarı atar.
İsterseniz değişken adına ifadeler ekleyebilirsiniz ... Sıklıkla 😱 ve 🛠 kullanıyorum, gerçekten düzeltilmesi gereken bir şey için bile 💩 düşünebilirim. Sen değiştirebilirsiniz FIX_ME__
istediğini ile: ALGORITHM_NEEDS_REVIEW
, BugID_148
, veyaJOHNNY_YOU_BROKE_THIS
bazı örneklerdir.
Hızlı, hiçbir kurulum, özlü ve ifadeler bile kodunuza mizah / kişilik ekleyebilir. Bazen en basit çözüm en iyi çözümdür.
let fixMeMakeMeNonOptional: Int
size Immutable value fixMeMakeMeNonOptional was never used; consider replacing with _ or removing it
sorun gezgininde verir . Diğer tüm çözümler size çok daha genel hata mesajları verir.
Xcode 10 ve Swift 4.2 ile başlayarak #warning
tekrar şu şekilde kullanabileceksiniz :
#warning("TODO: Clean up this code after testing")
Bu, Xcode'da beklendiği gibi bir uyarı olarak görünecektir!
Bu, #if
kontrollerle birlikte bile çalışır , örneğin aşağıdakiler yalnızca hedef platformunuz iOS ise bir uyarı gösterir:
#if os(iOS)
#warning("this code is untested in iOS")
#endif
#error
Yapınızın başarısız olmasını istiyorsanız da var .
Swift size kullanabilirsiniz XCode 6 kullanarak farklı farklı amaçlar için yerlerinden türlü. Apple bu konuda şöyle diyor:
Xcode artık kodunuza açıklama eklemek ve atlama çubuğunda listelemek için // MARK :, // TODO: ve // FIXME: yer işaretlerini destekliyor .
Yani bir açıklama içeren bir uyarı ayarlamak için şöyle bir şey kullanırsınız:
//TODO: Clean up this code after testing
Sadece kısa bir işaret ayarlamak istiyorsanız (ne yapacağınızı hatırlayacağınızı varsayarak), bunu kullanın:
//FIXME
DÜZENLEME: Ancak bu yer işaretleri yalnızca XCode'un atlama çubuğunda görünür; bu, ne istediğinizi ve ne olacağını beklemeyebilir - özellikle // TODO: ve // FIXME işaretlerinden. Bunun üzerine bir radar açtım: # 17776817. Umarım Apple bunu XCode 6'daki gelecek yapılara ekleyecektir.
ÇÖZÜM (DÜZENLEME 2):
Swift Linter'ı Homebrew aracılığıyla kurarsanız (a'dan brew install swiftlint
sonra çalıştırılır brew update
) ve önerilen derleme komut dosyasını projenize eklerseniz, tüm TODO
ve yer FIXME
işaretlerinizin Xcode içinde uyarı olarak göründüğünü göreceksiniz . SwiftLint, ihtiyaçlarınıza uyacak şekilde yapılandırabileceğiniz bazı uyarılar / hatalar bile ekleyecektir - Yalnızca SwiftLint'i kullanmanızı tavsiye edebilirim ve bu sorunu harika bir şekilde çözer!
Hala Apple ekibi tarafından eklenmedi. Yapmaya karar verdim muhtemelen bir hile, ama en azından bana bir FIXME mesajı gösteriyor. Yani yaptığım Swift dosyasında FIXME () işlevini bildirmektir:
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
ve başka bir işlevden çağırdığımda bir uyarı gösteriyor, örn.
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}
Swift 2 kullanımı için
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
Şuna bak makaleye bakın .
Tüm etiketleri vurgulayacak kendi komut dosyanızı yazabilirsiniz.
TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"
egrep --directories='skip'
gibi isimlerle dizinleri görmezden Device.swift
Alternatif olarak, uyarılar panelinde bir şey görünmesini istiyorsanız, şöyle bir şey yazabilirsiniz:
if (false){
var x = 2;
}
Gerçekten herhangi bir metin gösteremezsiniz, ancak en azından daha görünür bir işaretçi, özellikle de hatalar gibi (çoğu) uyarıları tedavi etme eğilimindeyseniz.
Ben önerdi ve uygulanan bu özelliği ve Swift 4.2 ile gönderecektir. Şimdi swift.org'dakimaster
araç zincirini indirerek kullanabilirsiniz .
#if os(macOS)
#error("macOS is not supported")
#endif
#warning("finish this")
Kullandığım bir CocoaPod'un .swift
adı vardı , bu yüzden Kyle'ın komut dosyasının çökmesine neden olan bir dizin döndü. Komuta eklemek -type f
, find
yalnızca eşleşen dosyalara bakarak bu sorunu düzeltir*.swift
da kalıpla eşleşen dizinleri dönen yerine.
Kullandığım son kod:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
Derleme kurulumunuzu ayarlamaktan hoşlanmıyorsanız, başka bir basit çözüm de yorumun önüne bir düzenleyici yer tutucusu yapıştırmaktır:
<#todo#>// stop and fixme!
Oluşturduğunuzda "Kaynak dosyada Editör yer tutucu" hatası alıyorsunuz, ancak Jordan'ın çözümünün aksine, yazarken sizi rahatsız edecek canlı bir hata yok:
Çok araştırma ve özlemden sonra, böyle bir varlığın olmadığına ikna oldum. Hala #pragma mark mekanizması eksikliği devam eden en son Xcode sürüm notları ile umutluyum, #warning ve #error da geliyor olabilir.
Bir kenara, ben çok az Apple ile bir Radar dosyalama tavsiye olarak bugreport.apple.com bu işlevselliği eklemek için (eğer 17702491 dupe olabilir).
Yorum etiketine ve derleme yapılandırmasına dayalı olarak Xcode Issue Navigator'a uyarı ve hatalar koymanıza izin veren yapılandırılabilir bir araç yazdık: https://github.com/doubleencore/XcodeIssueGenerator
Yükle:
brew tap doubleencore/tap
brew install xcodeissuegenerator
Sonra Run Script Build Phase'a bir satır ekleyin:
# Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories.
XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/"
İşte onu nasıl kullandığımızı açıklayan bir makale .
Hataları ve uyarıları destekleyen Xcode 10 ile partiye geç olabilirim, ama sadece bir String koyarak:
"Need to finish implementing this"
bir uyarı üretecektir: String literal is unused
otomatik tamamlama hala çalışıyor ve proje hala derleniyor.
Cevabım sorunuzu tam olarak karşılamıyor, ancak kolay bir şey istiyorsanız, herhangi bir ek hazırlık yapmadan tüm projelerde çalışan bu alcatraz eklentisini kullanabilirsiniz . Sadece aşağıdakileri yapın:
1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal:
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode
3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install
4) Relaunch Xcode and again agree to install additional bundles
5) From now press Ctrl + T and you will see all Tags in nice window
Ayrıca yeni etiketler ekleme tercihleri de var
Bu snippet'in avantajı - Bölmelerden gelen uyarıları göstermez:
if [ "${CONFIGURATION}" = "DEBUG" ]; then
TAGS="TODO:|FIXME:|WARNING:|warning:" find "." \( -name "*.swift" \) -not -path "./Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
Nasıl kurulur:
//WARNING
#pragma gibi olacak//MARK
ama şu anda hiçbiri XCode beta eklenmiş değil.