Dans Swift, ENABLE_NS_ASSERTIONS
est ignoré et si les assertions sont SWIFT_OPTIMIZATION_LEVEL
ou désactivées dépend de SWIFT_OPTIMIZATION_LEVEL
, voir ici pour plus d'informations .
assert()
est actif pour -Onone
assertionFailure()
est actif pour -Onone
precondition()
est actif pour -Onone
et -O
preconditionFailure()
est actif pour -Onone
, -O
et -Ounchecked
fatalError()
est actif pour -Onone
, -O
et -Ounchecked
Debug et Beta Builds devraient avoir des assertions activées , Release Builds devrait avoir des assertions désactivées .
Je pourrais écrire toutes mes affirmations dans Swift via la méthode precondition
et comstackr Release builds avec le drapeau -Ounchecked
, bêta construit avec le drapeau -O
.
La valeur par défaut dans iOS pour les versions Release est -O
. Y a-t-il quelque chose contre l'utilisation de -Ounchecked
pour les versions de versions? Quels autres effets secondaires indésirables pourraient causer cela?
Vous ne devriez certainement pas comstackr -Ounchecked
pour la libération afin d'utiliser la precondition
seulement pendant le test. Comstackr -Ounchecked
désactive également les vérifications pour des choses comme le tableau hors limites et le déballage de nil
, ce qui pourrait conduire à des bogues de production assez méchant impliquant une corruption de memory.
Vous pouvez contrôler le comportement d'assertion indépendamment des parameters d'optimization du compilateur via l'argument -assert-config
de swiftc
:
$ cat assert.swift assert(false, "assertion asserted") println("made it here...") $ swiftc -Onone assert.swift; ./assert assertion failed: assertion asserted: file assert.swift, line 1 Illegal instruction: 4 $ swiftc -O assert.swift; ./assert made it here... $ swiftc -O -assert-config Debug assert.swift; ./assert assertion failed: assertion asserted: file assert.swift, line 1 Illegal instruction: 4 $
Il ne semble pas y avoir de button de configuration Xcode Build pour cela, mais vous pouvez l'append en utilisant le paramètre "Autres drapeaux rapides".