Czy możliwe jest wymyślenie w języku Swift skryptu assert w wersji statycznej w C++? Może w jakiś sposób wykorzystać ograniczenia typu dla generycznych, aby zmusić kompilator do zerwania?Skomplikować asertywność w Swift?
Odpowiedz
Jeśli mówimy o ogólnym assert, gdzie aplikacja będzie się zawiesić, jeśli dany warunek nie powiedzie się, wystarczy użyć: assert(condition,message)
Na przykład: assert(2 == 3,"failing because 2 does not equal 3")
Jest to możliwe w Swift. Należy jednak zauważyć, że mantra projektowa firmy Apple polega na tym, że aplikacja nigdy nie powinna ulegać awarii, ale powinna obsłużyć wszystkie jej błędy w sposób "wyrafinowany".
Masz na myśli normalny plik wykonywalny środowiska wykonawczego. O to, o co pytam, to asertywna assert jak static_assert w C++. Jest to używane do wyrażeń statycznie weryfikowalnych, które powodują błąd kompilatora w przypadku niepowodzenia. – Neil
Neil, przepraszam, że tak naprawdę nie podążałem - nie użyłem static_assert. Koniec sekcji podstawowej w książce Swift krótko wspomina o twierdzeniach. Nie widziałem niczego, co sugeruje czas kompilacji, na przykład to, o co prosisz. Nie wiem, czy oni nawet je wspierają. Link: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html –
Ta recenzja jest obecnie w trakcie sprawdzania w Swift evolution, ale obecnie nie jest w tym języku.
Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj podstawowe części odpowiedzi i podaj link dla odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/19050719) – Maak
Nie mam pojęcia, jak to może być przydatne. i Swift już może używać 'where', aby ograniczyć generics –
coś w stylu #error? –
Wspomniałem tylko o ograniczaniu generycznych podejść jako potencjalnej implementacji, a nie o tym, co chciałem potwierdzić. W moim przypadku definiowałem dużą liczbę powiązanych ze sobą stałych całkowitych, które chciałem sprawdzić w czasie kompilacji. Coś, czego normalnie użyłbym static_assert dla C++. – Neil