Ist es möglich, eine Kompilierungszeit Assert in Swift wie statisch_assert in C++ zu erstellen? Vielleicht eine Möglichkeit, Typeinschränkungen für Generics auszunutzen, um einen Compiler-Break zu erzwingen?Kompilierzeit behaupten in Swift?
Antwort
Wenn Sie sich über eine allgemeine assert sprechen, wo die App abstürzt, wenn eine bestimmte Bedingung fehlschlägt, verwenden Sie einfach: assert(condition,message)
Zum Beispiel: assert(2 == 3,"failing because 2 does not equal 3")
Dies ist möglich, in Swift. Allerdings sollte ich anmerken, dass Apples Design-Mantra ist, dass eine App niemals abstürzen sollte, sondern stattdessen alle ihre Fehler in einer "ausgeklügelten" Art und Weise behandeln sollte.
Sie beziehen sich auf die normale Laufzeit Assert. Was ich frage ist eine Kompilierzeit Assert wie static_assert in C++. Dies wird für statisch überprüfbare Ausdrücke verwendet, die bei einem Fehler einen Compilerfehler verursachen. – Neil
Neil, sorry, ich habe nicht wirklich gefolgt - ich habe static_assert nicht benutzt. Am Ende des Basics-Abschnitts im Swift-Buch werden kurz Behauptungen erwähnt. Ich habe nichts in Bezug auf die Kompilierzeit gesehen, wie das, was du verlangst. Ich weiß nicht, ob sie sie überhaupt unterstützen. Link: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html –
Dies wird derzeit in Swift evolution überprüft, ist aber derzeit nicht in der Sprache.
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und stellen Sie den Link als Referenz zur Verfügung. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/19050719) – Maak
Ich habe keine Ahnung, wie es nützlich sein kann. und Swift kann schon 'where' verwenden Generics –
so etwas wie #Fehler zu beschränken? –
Ich erwähnte nur einschränkende Generika als mögliche Implementierung, nicht was ich behaupten wollte. In meinem Fall habe ich eine große Anzahl zusammenhängender Kompilierzeitkonstanten definiert, die ich zur Kompilierzeit validieren wollte. Etwas, das ich normalerweise static_assert für in C++ verwenden würde. – Neil