Ich verwende Generics, um verschiedene Typen wie Int, Double, Float usw. hinzuzufügen. Ich habe den folgenden Code verwendet, aber ich erhalte den Fehler "Binärer Operator' + 'kann nicht auf zwei' T 'Operanden angewendet werden.Binärer Operator '+' kann nicht auf zwei 'T'-Operanden angewendet werden
Antwort
Swift weiß nicht, dass der generische Typ T einen '+' Operator hat. Sie können + nicht für einen beliebigen Typ verwenden: z. auf zwei Ansicht Controller + macht nicht zu viel Sinn
Sie können Protokollkonformität verwenden, um schnell etwas über Ihren Typ wissen zu lassen!
hatte ich einen Sprung auf einem Spielplatz und das ist wahrscheinlich das, was Sie für :)
protocol Addable {
func +(lhs: Self, rhs: Self) -> Self
}
func add<T: Addable>(num1: T, _ num2: T) -> T {
return num1 + num2
}
extension Int: Addable {}
extension Double: Addable {}
extension Float: Addable {}
add(3, 0.2)
Lassen Sie mich wissen suchen, wenn Sie eines der Konzepte müssen hier
demonstriert erklärtversuchen hinzufügen (CGFloat (2.5), Float (2.0)) –
@LeoDabus Swift hat keine Definition von + für CGFloat und Float. Um dies zu lösen, können Sie + für CGFloat und Float definieren. Alternativ können Sie die Lösung leicht ändern, um zu sagen, der erste Typ. –
tnx Adam Campbell für die sehr geklärte Erklärung. – user2749248
In Swift 4/Xcode 9+ können Sie die Numeric protocol nutzen.
func add<T: Numeric>(num1: T, num2: T) -> T {
return num1 + num2
}
print(add(num1: 3.7, num2: 44.9)) // 48.6
print(add(num1: 27, num2: 100)) // 127
Damit können Sie kein spezielles Protokoll selbst erstellen.
Dies funktioniert nur in den Fällen, in denen Sie die Funktionalität des Numeric-Protokolls benötigen. Möglicherweise müssen Sie etwas Ähnliches wie @ adams Antwort für% und andere Operatoren tun, oder Sie können andere Protokolle nutzen, die von Apple im Xcode 9 SDK bereitgestellt werden.
Aber mit dieser Lösung müssen alle Typen gleich sein ... die Typen müssen unterschiedlich sein können, dh Int + Float – StackUnderflow
- 1. Binärer Operator '|' kann nicht auf zwei UIViewAutoresizing-Operanden angewendet werden
- 2. Binärer Operator '&&' kann nicht auf zwei 'Int'-Operanden angewendet werden
- 3. iOS: Binärer Operator '| =' kann nicht auf zwei 'Bool'-Operanden angewendet werden
- 4. Binärer Operator '+' kann nicht auf zwei 'int2'-Operanden angewendet werden. Müssen Sie verwenden ‚& +‘
- 5. Swift binärer Operator '+' kann nicht auf zwei CGFloat-Operanden angewendet werden
- 6. Operator && kann nicht angewendet werden
- 7. Binärer Operator '&&' kann nicht auf Operanden vom Typ Bool und String angewendet werden
- 8. Binärer Operator * kann nicht auf Operanden vom Typ Int und Double angewendet werden
- 9. Binärer Operator '==' kann nicht auf Operanden vom Typ '()' und 'Bool' angewendet werden
- 10. Binärer Operator '~ =' kann nicht auf Operanden vom Typ 'String' und 'String?' Angewendet werden.
- 11. Operator kann nicht auf java.lang.string angewendet werden java.lang.string
- 12. iOS v7.3.1 SpriteKit - For Schleife Err Msg: Binärer Operator '.. <' kann nicht angewendet werden
- 13. Operator '+' kann nicht auf Operanden vom Typ MvcHtmlString angewendet werden
- 14. Operator ">" kann nicht auf "ulong" und "int" angewendet werden
- 15. Operator "&" kann nicht auf Byte angewendet werden, Int, Boolean
- 16. Kann nicht Operator == auf generische Typen in C# angewendet werden?
- 17. binärer Operator '==' kann nicht auf Operanden vom Typ 'String!' Angewendet werden. und ‚[Zeichenfolge]‘ in Swift 2 Xcode 7
- 18. Binäroperators + kann nicht auf zwei int Operanden
- 19. binärer Operator überladen; implizite Typkonvertierung
- 20. Binärer Operator überladen auf einer Vorlagenklasse
- 21. Binärer Operator überladen und Polymorphismus
- 22. Binary Operator ‚&&‘ kann nicht auf zwei Bool-Operanden
- 23. Betreiber '.' kann nicht auf Lambda-Ausdruck angewendet werden
- 24. 8 puzzle java: binärer operator
- 25. Binäroperators ‚.. <‘ kann nicht auf zwei ‚Int‘ Operanden angewendet werden [Swift]
- 26. Replace in FragmentTransiction kann nicht auf InfoFragment angewendet werden
- 27. Swift Generics im Protokoll: operator '===' kann nicht auf Operanden vom Typ '_' und 'Self.T' angewendet werden
- 28. C#, Operator '*' kann nicht auf Operanden vom Typ 'double' und 'decimal' angewendet werden
- 29. Operator '! =' Kann nicht auf Operanden vom Typ 'Task' und 'int' angewendet werden
- 30. Der Operator '<' kann nicht auf Operanden vom Typ 'dezimal' und 'doppelt' angewendet werden.
Und die Frage ist ...? –
Was ist, wenn der Typ keine Nummer ist? Was passiert wild? –
zaph
Vergleichen http://stackoverflow.com/questions/25575513/what-protocol-should-be-adopted-by-a-type-for-a-generic-function-to-take-any-num –