Heeft Swift een #warning-equivalent?
Het wordt gewoon gebruikt om een waarschuwing weer te geven in de eigen GUI van Xcode
Ik ben ook benieuwd of er een #error-equivalent is.
Apple heeft gezegd dat het #pragma-teken binnenkort komt, mogelijk hetzelfde hiermee.
Antwoord 1, autoriteit 100%
Bewerken
Vanaf Swift 4.2 is ondersteuning op taalniveau beschikbaar voor zowel buildwaarschuwingen als fouten.
#warning("Warning description")
#error("Throws a build error")
Oorspronkelijk antwoord
Snel, vies en oh zo elegant eenvoudig allemaal tegelijk.
// Description of what you need to fix
var FIX_ME__🛠🛠🛠: AnyObject
Gooit een waarschuwing dat ‘FIX_ME__🛠🛠🛠’ nooit is gebruikt.
Je kunt emoticons toevoegen aan de variabelenaam als je wilt… Ik gebruik vaak 😱 en 🛠, voor iets dat echt gerepareerd moet worden, zou ik zelfs 💩 overwegen. Je kunt FIX_ME__
vervangen door wat je maar wilt: ALGORITHM_NEEDS_REVIEW
, BugID_148
of JOHNNY_YOU_BROKE_THIS
zijn enkele voorbeelden.
Snel, geen configuratie, beknopt en emoticons kunnen zelfs humor/persoonlijkheid aan uw code toevoegen. Soms is de meest eenvoudige oplossing de beste oplossing.
Antwoord 2, autoriteit 97%
In de toekomst kunnen Apple-ontwikkelaars heel goed een //WARNING:
-oriëntatiepunt uitbrengen, of de functionaliteit leveren voor een ander genoemd oriëntatiepunt.
Om deze functionaliteit vandaag echter met Swift in Xcode aan te roepen, kunt u het volgende doen, zoals uiteengezet door Ben Dodson & Jeffrey Sambells:
Voeg een nieuw script uitvoeren toe aan het tabblad bouwfasen van uw doel (projectinstellingen > bouwfasen > ‘+’ > nieuwe scriptfase uitvoeren), en plak de volgende code in het lege vak:
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/"
Dit dwingt Xcode om een waarschuwing te markeren tijdens het compileren voor alle // TODO:
of // FIXME:
opmerkingen die je markeert.
U kunt TAGS ook aanpassen met een aangepaste tag: TAGS="WARNING:"
in de bovenstaande code, waardoor het standaardgedrag voor TODO & FIXME en zou een compileertijdwaarschuwing geven bij opmerkingen die zijn gemarkeerd als // 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
BEWERKEN: 18/11/14
@david-h bracht een goed punt naar voren in zijn opmerking. Als u deze waarschuwingen alleen in een specifieke buildconfiguratie wilt plaatsen, kunt u het volgende doen:
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
U kunt ook ‘Release’ gebruiken in plaats van ‘Debug’ om alleen productiebuilds te targeten.
Antwoord 3, autoriteit 52%
Post WWDC 2018-update
Vanaf Xcode 10 en Swift 4.2 kun je nu #warning
weer als volgt gebruiken:
#warning("TODO: Clean up this code after testing")
Dit verschijnt zoals verwacht als een waarschuwing in Xcode!
Dit werkt zelfs in combinatie met #if
-controles, het volgende toont bijvoorbeeld alleen een waarschuwing als uw doelplatform iOS is:
#if os(iOS)
#warning("this code is untested in iOS")
#endif
Er is ook #error
als je wilt dat je build mislukt.
Pre WWDC 2018 antwoord
In Swift met XCode 6 kun je verschillendesoorten oriëntatiepunten gebruiken voor verschillende doeleinden.
Dit is wat Apple erover zegt:
Xcode ondersteunt nu //MARK:, //TODO: en //FIXME: oriëntatiepuntenom te annoteren
uw code en vermeldt ze in de springbalk.
Dus voor het instellen van een waarschuwing met een beschrijving zou je zoiets als dit gebruiken:
//TODO: Clean up this code after testing
Als u slechts een korte markering wilt plaatsen (ervan uitgaande dat u onthoudt wat u moet doen), gebruikt u dit:
//FIXME
BEWERKEN:
Deze oriëntatiepunten verschijnen echter alleen in de springbalk van XCode, wat misschien niet is wat je wenst en wat je zou verwachten – vooral van de //TODO: en //FIXME-markeringen. Ik heb daar een radar op ingediend: #17776817. Hopelijk zal Apple dit in de komende builds in XCode 6 toevoegen.
OPLOSSING (BEWERK 2):
Als u de Swift Linter installeert via Homebrew (voer brew install swiftlint
uit na een brew update
) en voeg het voorgestelde buildscriptvoor uw project, dan ziet u al uw TODO
– en FIXME
-oriëntatiepunten verschijnen als waarschuwingen in Xcode . SwiftLint zal zelfs nog wat meer waarschuwingen/fouten toevoegen die u kunt configurerenom aan uw behoeften te voldoen – ik kan alleen raad het gebruik van SwiftLint aan en het lost dit probleem op een geweldige manier op!
Antwoord 4, autoriteit 34%
Nog steeds niet toegevoegd door het Apple-team. Wat ik besloot te doen, is waarschijnlijk vals spelen, maar het laat me tenminste een FIXME-bericht zien. Dus wat ik doe is de functie FIXME() declareren in het Swift-bestand:
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
en als ik het vanuit een andere functie aanroep, wordt er wel een waarschuwing weergegeven, bijvoorbeeld
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}
Gebruik voor Swift 2
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
Antwoord 5, autoriteit 26%
Bekijk dit artikel.
Je kunt je eigen script schrijven waarin alle tags worden gemarkeerd.
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/"
Antwoord 6, autoriteit 7%
Als alternatief, als je wilt dat er iets in het waarschuwingenpaneel verschijnt, kun je zoiets schrijven als:
if (false){
var x = 2;
}
Je kunt niet echt tekst laten verschijnen, maar het is in ieder geval een beter zichtbare markering, vooral als je de neiging hebt (de meeste) waarschuwingen als fouten te behandelen.
7, Autoriteit 2%
Na veel zoeken en verlangen, ben ik ervan overtuigd dat er geen dergelijke entiteit bestaat. Ik ben nog steeds hoopvol met de nieuwste Xcode-release-opmerkingen die het voortdurende ontbreken van een #pragma-mark-mechanisme vermelden, #warning en #Error kan ook ook komen.
Als een terzijde, raad ik ten zeerste aan om een radar met Apple op te stellen bij bugreport.apple.com om deze functionaliteit toe te voegen (u kunt dupe 17702491).
Antwoord 8
Voordeel van dit fragment: er worden geen waarschuwingen van Pods weergegeven:
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
Hoe te installeren: