Wie von @ Kirsteins bemerkt, erkennt Swift nun widersprüchliche Symbole zwischen Swift und Obj-C und schnelle Symbole, die Obj-C-Kummer verursachen würden. Zusätzlich zu der Antwort, können Sie dies in der Regel vermeiden, indem ein erforderliches Etikett für die zusätzlichen Typen spezifizieren, so dass der Anruf Signatur zu ändern:
import Foundation
extension NSObject {
func foo(d:Double, i:Int) { println("\(d), \(i)") }
func foo(withInt d:Int, i:Int) { println("\(d), \(i)") }
}
let no = NSObject()
no.foo(withInt:1, i: 2)
Darüber hinaus aber, und Ihre unmittelbare Frage zu beantworten, Sie versuchen, Obj-C-Idiome auf Swift anwenden. Was Sie wirklich wollen, ist entweder zu implementieren didSet
(höchstwahrscheinlich) oder möglicherweise set
:
class WhatIDidLastSummer {
var vacation:Bool = false {
didSet {
// do something
}
}
var staycation:Bool {
get { return true }
set {
// do something
}
}
}
Dies wird angezeigt Dies impliziert, dass das Überladen von Methoden in solchen Klassen wie UIViewControllern oder in der Tat keiner Klasse, die eine Klasse von objective-c unterklassifiziert, möglich ist. Ist das korrekt? –
Es scheint die saubere Problemumgehung zu sein, diese privaten zu deklarieren. Auf diese Weise versucht der Compiler nicht, sie in ObjC zu konvertieren, so dass kein Konflikt entsteht. – kwerle
@ kwerle Awesome Problemumgehung. Daran habe ich vorher nicht gedacht. – Kirsteins