Constante isDebug basée sur les conditions de compilation active
Une autre solution, peut-être plus simple, qui donne toujours un booléen que l'on peut passer dans les fonctions sans avoir besoin d'utiliser des poivrons #if
conditionnelles dans l'ensemble de votre base de code est de définir DEBUG
comme l'une des cibles de construction de votre projet Active Compilation Conditions
et inclure ce qui suit (je le définis comme une constante globale) :
#if DEBUG
let isDebug = true
#else
let isDebug = false
#endif
Constante isDebug basée sur les paramètres d'optimisation du compilateur
Ce concept s'appuie sur La réponse de kennytm
Le principal avantage par rapport à la méthode de kennytm est qu'elle ne repose pas sur des méthodes privées ou non documentées.
Sur Swift 4 :
let isDebug: Bool = {
var isDebug = false
// function with a side effect and Bool return value that we can pass into assert()
func set(debug: Bool) -> Bool {
isDebug = debug
return isDebug
}
// assert:
// "Condition is only evaluated in playgrounds and -Onone builds."
// so isDebug is never changed to true in Release builds
assert(set(debug: true))
return isDebug
}()
Par rapport aux macros du préprocesseur et la réponse de kennytm ,
-
Vous n'avez pas besoin de définir un -D DEBUG
pour l'utiliser
-
~ Il est en fait défini en termes de paramètres d'optimisation, et non de configuration de construction de Xcode.
-
Documenté ce qui signifie que la fonction suivra les schémas normaux de publication et de dépréciation des API.
-
L'utilisation de la méthode if/else no générer un avertissement "Ne sera jamais exécuté".
1 votes
Comme idée, vous pourriez mettre ceci dans vos en-têtes de pontage obj-c..
60 votes
Vous devriez vraiment attribuer une réponse car vous avez le choix entre plusieurs réponses et cette question vous a valu beaucoup de votes positifs.
0 votes
@Userthatisnotauser vous avez totalement manqué le point. Vous posez une question, vous obtenez de bonnes réponses - choisissez-en une. N'ignorez pas le temps et l'effort.
1 votes
@DavidH Non, en fait c'est l'inverse. Mon commentaire était juste une référence à Hitchhiker's sur 42. Je suis tout à fait d'accord, et je veux upvoter, mais je ne peux pas me résoudre à faire le 43.
1 votes
@Userthatisnotauser le poster a 19k points - les gens ont voté ses réponses mais il ne semble pas se soucier des gens qui l'aident. Je choisis toujours une réponse.
0 votes
Vérifiez leur compte, il est mort.