Sen de diğer işlevler için benzer bir ihtiyacı olabilir ve nokta türleri (veya diğer "toplanabilirdir" şeyler) Tüm tamsayı için bunları uygulamak ve kayan masif kod tekrarını neden olur.
Bir kısmi çözüm, özel olarak +, -, *, /,% protokol IntegerArithmeticType uygunluğunu gerektirecek geçerli: tanımlandıkları taşma işlemlerini uygulamak çünkü
func example<T: IntegerArithmeticType>(x: T, y: T) -> T { return x + y }
println(example(40, 2)) // --> 42
Bu kesirli bir tür için geçerli değildir IntegerArithmeticType gelen _IntegerArithmeticType iletişim kuralından.
Ancak belirli bir global tanımlanmış operatör fonksiyonu uygunluk için türlerini uzanan düşündüğünüzden kadar "rahatsız edici" değil:
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!
Bir kez bunu, o zaman size kodunda toplanabilir kullanabilirsiniz sonsuza:
func example<T: Summable>(x: T, y: T) -> T { return x + y }
println(example("4", "2")) // --> 42
Gerçekten de, @connor'un işaret ettiği gibi, bu, @ Jean-PhilippePellet'in bahsettiğiniz cevabına eşdeğerdir.
Başka bir yol olacağını umuyordum, sadece bu tür bir işlevsellik elde etmek için yeni bir protokol yapmak biraz can sıkıcı gibi görünüyor. Komut-clck işlemi benim için yeni, bunu denemeliyim. –