Soru Swift: #warning eşdeğeri


Swift'in #warning karşılığı var mı? Sadece Xcode’ın kendi arayüzünde bir uyarı göstermek için kullanılır.

Aynı zamanda #error eşdeğeri var mı diye de ilgileniyorum.

Apple #pragma işareti yakında geliyor dedi, muhtemelen bununla aynı olabilir.

enter image description here


166
2018-06-12 11:58


Menşei


Sanırım öyle olacak //WARNING tıpkı #pragma gibi olacak //MARK ancak şu anda hiçbiri XCode beta'ya eklenmedi. - Lord Zsolt
Bir uyarı isteğinde bulunmayı şiddetle tavsiye ederim. // UYARI - pixel
@pixel Az önce bir radar verdim - SomeGuy


Cevaplar:


Gelecekte, Apple devleri çok iyi bir //WARNING: işaret veya başka adlandırılmış bir dönüm noktası için işlevsellik sağlayın.

Ancak, bugün Xcode'taki Swift ile bu işlevselliği ele almak için, Ben Dodson & Jeffrey Sambells tarafından özetlenen aşağıdakileri yapabilirsiniz:

Hedefinizin oluşturma aşamaları sekmesine (proje ayarları> yapı aşamaları> '+'> yeni çalışma komut dosyası aşaması) yeni bir Komut Dosyası Ekleme ekleyin 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 herhangi bir zaman için derleme zamanında bir uyarıyı işaretlemeye zorlayacaktır. // TODO: veya // FIXME: yorum yazıyor.

Alternatif olarak, TAGS'yi özel bir etiketle değiştirebilirsiniz: TAGS="WARNING:" Yukarıdaki kodda, TODO & FIXME için varsayılan davranışı koruyacak ve olarak işaretlenen herhangi bir yorum için derleme süresi 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-warnings-from-todo-comments

DÜZENLEME: 18/11/14

@ david-h yorumunda iyi bir noktaya yükseldi. Bu uyarıları yalnızca belirli bir yapılandırmada yükseltmek isterseniz, 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 derlemelerini hedeflemek için "Hata Ayıklama" yerine "Serbest Bırak" seçeneğini kullanabilirsiniz.


150
2017-11-11 16:22



Apple bunu düzeltene kadar bu çok güzel bir geçici çözümdür :) - SomeGuy
Bununla ilgili sorun, uygulamamın iki modu var: geliştirme ve üretim. Üretimde temiz kaldığını bilmek istiyorum, ancak geliştirme konusunda bir uyarı alıyorum, aslında farklı modlar, zaman aşımları, diğer ayarlar vb. Kullanarak farklı modlarda olduğumu hatırlatıyor. Arie'nin önerisi, bunu yapmama izin veriyor. herşeyi işaretler. Dedi ki, bu tekniğin kesin bir kullanımı var, o yüzden ben de oy verdim! - David H
Ne kadar kullanışlı bir fikir! Bu yararlı bilgileri paylaştığınız için teşekkür ederiz. - Tommy
kyle Perl -p -e "s / ($ TAGS) / uyarı: \ $ 1 /" bu satırın anlamını bana bildirir misiniz? - Rocker
Harika çalışıyor, ancak -type f seçeneğine find dizinleri bulma sonuçlarından çıkarma komutu. Bu çoğu insan için sorun olmamalı, ancak R.swift pod, sahip olduğum aynı hatayı alacaktır çünkü R.swift bir dizin - Dan F


Düzenle

Swift 4.2'den itibaren, hem yapı uyarıları hem de hatalar için dil seviyesi desteği mevcuttur.

#warning("Warning description")
#error("Throws a build error")

Orijinal cevap

Hızlı, kirli ve ah hepsi aynı anda çok basit.

// Description of what you need to fix

var FIX_ME__: AnyObject

'FIX_ME__' hiç kullanılmamış olduğuna dair bir uyarı atar.

İsterseniz değişken ismine de ifadeler ekleyebilirsiniz ... Sık sık kullanırım ve düzeltmeyi gerektiren bir şey için bile düşünürdüm. Değiştirebilirsiniz FIX_ME__ ne istersen ile: ALGORITHM_NEEDS_REVIEW, BugID_148veya JOHNNY_YOU_BROKE_THIS bazı örnekler.

Hızlı, hiçbir kurulum, özlü ve ifadeler kodunuza mizah / kişilik ekleyebilir. Bazen en basit çözüm en iyi çözümdür.


98
2018-02-03 22:03



... Neden tüm oylar? Bu, burada diğer herhangi bir yöntem kadar çalışır. Eğer oylamaya devam ederseniz, en azından bir neden verin, belki yeterince açık değildim ya da yaptığım şeyle ilgili yanlış bir şey var. Varsa bilmek isterim. - Jordan Smith
Evet, bunun neden daha fazla kışkırtılmadığından emin değilim. Diğer tüm çözümler çok karmaşıktır. - Simone Manganelli
@SimoneManganelli teşekkür ederim! Kabul. - Jordan Smith
@ZaEeMZaFaR derleyici büyük olasılıkla bundan kurtulacaktır. Ayrıca, çoğu durumda, bu konular serbest bırakılmadan önce düzeltilecektir. Ve - her ne sebeple olursa olsun, derleyici ondan kurtulmak için yeterince akıllı değildir (bence bu pek olası değildir) - Hafızada 100 Int vars bellekte 6.4kb'dir - temelde hiçbir şey yoktur. Benim için geçerli bir noktanız olduğunu düşünmüyorum. - Jordan Smith
Diğerlerini kullandım ama bunu kullanmaya geçtim. En basit olanı ve hatta kendinize uyarıda gösterilecek küçük bir mesaj verebilirsiniz, yani: let fixMeMakeMeNonOptional: Int sana verir Immutable value fixMeMakeMeNonOptional was never used; consider replacing with _ or removing it  konu gezginde. Diğer tüm çözümler size çok daha genel hata mesajları verir. - Nathan Perry


Henüz Apple ekibi tarafından henüz eklenmedi. Yapmaya karar verdiğim şey muhtemelen bir aldatmaca, ama en azından bana bir FIXME mesajı gösteriyor. Yani yaptığım şey, Swift dosyasında FIXME () işlevini bildirmek:

@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}

ve diğer herhangi bir işlevden çağırdığımda, bir uyarı gösterir, örn.

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    FIXME()     // Incomplete method implementation.
    return 0
}

enter image description here

Swift 2 kullanımı için

@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")

53
2018-04-21 02:18



Sadece kayıt için: @availability, hızlı 2'de "@ available" olarak yeniden adlandırıldı. - Tobias


WWDC 2018 Güncellemesini Gönderin

Xcode 10 ve Swift 4.2 ile başlayabileceksiniz. #warning yine böyle:

#warning("TODO: Clean up this code after testing")

Bu Xcode'da beklendiği gibi bir uyarı olarak görünecek!

Bu bile birlikte çalışır #if Çekler, ö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

Ayrıca var #error yapınızın başarısız olmasını istiyorsanız.


WWDC Öncesi 2018 Cevap

Swift'te XCode 6'yı kullanarak kullanabilirsiniz farklıfarklı amaçlar için görülecek yerler. İşte Apple şöyle diyor:

Xcode artık // MARK :, // TODO: ve // ​​FIXME: görülecek açıklama eklemek   kodunuzu ve onları atlama çubuğunda listeler.

Yani bir açıklama ile bir uyarı ayarlamak için böyle bir şey kullanırdınız:

//TODO: Clean up this code after testing

Kısa bir işaret ayarlamak istiyorsanız (ne yapacağınızı hatırlayacağınızı varsayarak), şunu kullanın:

//FIXME

DÜZENLE: Bununla birlikte, bu işaretler XCode'un atlama çubuğunda görünmektedir. Bu, ne istediğinizi ve ne olacağını beklemeyebilir - özellikle de // TODO: ve // ​​FIXME işaretlerinden. Bunun üzerine bir radar verdim: # 17776817. Umarım Apple, XCode 6'daki gelecek yapılarda bunu ekleyecektir.

ÇÖZÜM (DÜZEN 2): Swift Linter'ı Homebrew ile kurarsanız brew install swiftlint sonra brew update) ve Ekle önerilen derleme betiği projenize, o zaman tüm TODO ve FIXME işaretler Xcode içinde uyarı olarak görünür. SwiftLint, yapabileceğiniz birkaç uyarı / hata daha ekler Yapılandır İhtiyaçlarınıza uyacak şekilde - sadece SwiftLint'i kullanmanızı tavsiye ederim ve bu problemi harika bir şekilde çözüyor!


50
2017-07-22 12:21



Maalesef, uygulamanızı derlediğinizde bunlar uyarı panelinde görünmez. Hala ağrılı bir başparmak gibi yapışan birini bekliyorum, böylece onları unutmayacaksınız. Bunlar sadece atlama çubuğunda görünür ve projenizi bulmak için "// TODO" için arama yapmayı hatırlamanız gerekir. Ya da projenin tamamı için onları nasıl göreceklerini bilen varsa, bana bildirin. - başka bir Radar zamanı :) - SomeGuy
Evet, haklısın. Atlama çubuğunun soldaki yan çubuk olduğunu ve bu işaretlerin Sayı Gezgini'nde görüneceğini düşündüm, ama yapmıyorlar. Sadece bir radar verdim: # 17776817. :) - Dschee
@SomeGuy Ne demek onlar, atlama çubuğunda ortaya çıkıyor? Gördüğüm kadarıyla Xcode'daki editör penceresinin en üstünde bulunan çubukta hiçbir yer yok. Onları (benim için) fark etmenin tek yolu, onları Command + F ile aramaktır. Burada görülecek yerler nerede? - almel
@almel Atlama çubuğu, bir dosyanın tepesindeki aşağı açılır, geçerli dosyadaki işlevlerin listesini verir. i.cubeupload.com/jLRwTs.png - SomeGuy


Şuna bak makale.

Tüm etiketleri vurgulayacak kendi senaryonuzu 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/"

Bu sonuç: enter image description here


41
2017-09-22 07:44



Eklemek egrep --directories='skip' gibi dizinleri görmezden gelmek Device.swift - chunkyguy


Alternatif olarak, uyarı panelinde bir şey göstermek isterseniz, aşağıdaki gibi bir şey yazabilirsiniz:

if (false){
   var x = 2;
}

Gösterilecek herhangi bir metin alamıyorsunuz, ancak en azından daha görünür bir işaretleyici, özellikle de hatalar gibi (çoğu) uyarıları işleme eğilimindeyseniz.


12
2017-10-30 17:35



Ya da yanlış ("uyarı mesajı") - Bao Lei
Bu çözüm korkunç. Ama mevcut en iyi gibi görünüyor. Oy verdi, teşekkürler. - skagedal


Kullandığım bir CocoaPod vardı .swift Onun adına, Kyle tarafından senaryoyu çökmesine neden olan bir dizin döndü. Ekleme -type f göre find Komut, bu sorunu yalnızca eşleşen dosyalara bakarak düzeltir *.swift Desene uyan geri dönen dizinler 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/"

5
2017-10-31 01:12



Derleyicinin şikayet etmemesinin bir yolu var mı? "Komut / bin / sh yayılan hatalar alıyorum ama başarısızlık belirtmek için sıfır olmayan bir çıkış kodu döndürmedim" - Chris Paveglio
Alternatif olarak bunu gör yukarıdaki yorum - chunkyguy


Yapılandırma kurulumunuzu ayarlamayı sevmiyorsanız, başka bir basit çözüm yolu, yorumun önüne bir düzenleyici yer tutucusunu yapıştırmaktır:

<#todo#>// stop and fixme!

Oluşturduğunuzda bir "Editör yer tutucusu kaynak dosya" hatası alıyorsunuz, ancak Ürdün’ün çözümünün aksine, yazarken sizi rahatsız edecek canlı bir hata yok:

editor placeholder


4
2018-03-12 05:41



Güzel fikir - ama bir uyarı atmak değil, bir hata atmak değil mi? Bunu yapmak, siz onu kaldırana kadar yapmanıza izin vermeyecektir, ki çoğu (çoğu?) Durumda, kesinlikle istediğiniz gibi değildir. Todo ve fixme notları bazen haftalarca süren çalışmalara neden olur - bu süre boyunca projenizi oluşturmak ve çalıştırmak istediğinizi düşünürdüm :) - Jordan Smith
Elbette, bu iyi bir nokta. Bu yaklaşım, yalnızca uygulamayı başlatmadan ve hatta çalıştırmadan önce yapılması gereken daha acil yapılacaklar için yararlıdır. Ana faydası, bu yer tutucunun varlığına rağmen sözdizimi vurgulama ve diğer editör güzelliklerinin çalışmaya devam etmesidir. Siz de dahil olmak üzere burada diğer yaklaşımlardan bazılarını kullanıyorum, ancak yer tutucular bazen çok görevli olduğunda yardımcı oluyor. Bir işlev çağrısını otomatik tamamladığında yer tutucu Xcode ekleri ile aynı kullanım durumlarına uyar. - Minh Nguyễn