Swift: #warning equivalent

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.

voer hier de afbeeldingsbeschrijving in


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_148of JOHNNY_YOU_BROKE_THISzijn 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 #warningweer 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 #errorals 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 swiftlintuit 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
}

voer hier de afbeeldingsbeschrijving in

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/"

Dit resulteert in:
voer hier de afbeeldingsbeschrijving in


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:

voer hier de afbeeldingsbeschrijving in

Other episodes