W Swift 2.0 można rozszerzyć protokołów i typów
Kiedy przedłużyć go można dodawać rodzajowe where
ograniczeń. Tylko typy, które pasuje do tego zasada będzie w stanie wykorzystać tę funkcjonalność
Przykład:
public struct Thing<T> {
let x: T
}
extension Thing where T : IntegerType {
func giveMeInt() -> T {
return x
}
}
let a = Thing<Int>(x: 10)
a.giveMeInt()
let b = Thing(x: 10.1)
//b.giveMeInt() // Error
W ten sposób można dodać dodatkową funkcjonalność Thing<Int>
typu
nie wiem drogę aby dostosować się do protokołu w rozszerzeniu, ale nie ma to większego sensu.
Ograniczenie: Generic where T :
może być używana z protokołami i klas, dlatego nie możemy określić Int tam
brzmi jak rodzaj magii, którą chcesz – bandejapaisa
'Thing'; 'Rzecz '; 'Rzecz Te nie działają, ale to jest coś, co chciałbyś napisać, prawda? Myślę, że najbliższym, co możesz teraz uzyskać, jest sprawdzenie zgodności w niezalecanym inicjatorze i powrót do zera, gdy zgodność nie spełnia twoich wymagań. –
Pytasz o [ConstraintKinds] (https://www.haskell.org/ghc/docs/7.4.1/html/users_guide/constraint-kind.html), które są cechą systemów o wyższym typie. Biorąc pod uwagę, że nie mamy nawet regularnych rodzajów, nie mówiąc już o typach rodzin, naprawdę nie ma na to sposobu. – CodaFi