mogą mieć podobną potrzebę innych funkcji też i wdrażanie ich dla wszystkich liczb całkowitych i zmiennoprzecinkowych typów punkt (lub inne „rzeczy” summable) spowodowałoby ogromne powielania kodu.
Jeden częściowe rozwiązanie, szczególnie dla +, -, *, /,% jest wymaganie zgodności do IntegerArithmeticType protokół:
func example<T: IntegerArithmeticType>(x: T, y: T) -> T { return x + y }
println(example(40, 2)) // --> 42
tego nie stosuje się do pływających typy punktów, ponieważ nie realizuje działania przepełnienia zdefiniowane w protokole _IntegerArithmeticType, z którego dziedziczy IntegerArithmeticType.
Jednak rozszerzenie rodzajów zadaniu zdefiniowane globalnie funkcji operator zgodności nie jest tak „irytujące”, jak myślisz:
protocol Summable { func +(lhs: Self, rhs: Self) -> Self }
extension Int: Summable {}
extension Double: Summable {}
extension String: Summable {}
// extension for any other types... you are in full control!
to zrobić raz, a potem na zawsze można użyć Summable w was kodu:
Rzeczywiście, jak podkreślił @connor, jest to odpowiednik wspomnianej przez pana Jeana-PhilippePelleta odpowiedzi.
Miałem nadzieję, że będzie inny sposób, ponieważ tworzenie nowego protokołu tylko po to, aby uzyskać tego typu funkcjonalność, wydaje się nieco denerwujące. Operacja command-clck jest dla mnie nowa, będę musiał spróbować. –