Swift lui-même ne doit pas utiliser les sélecteurs - plusieurs ObjC modèles qui rendent l'utilisation de sélecteurs sont remplacés par quelque chose d'autre en Swift. (Utilisation facultative de chaînage au lieu de respondsToSelector:
tests, et n'utilisez pas d' performSelector:
parce que c'est pas sécurisé.)
Lors de l'interaction avec ObjC basée sur des Api qui prennent des sélecteurs, vous pouvez utiliser une chaîne de caractères pour représenter un; par exemple
myButton.addTarget(self, action: "buttonTapped:", forControlEvents: .TouchUpInside)
let timer = NSTimer(timeInterval: 1, target: self, selector: "test", userInfo: nil, repeats: false)
L' SEL
type en ObjC cartes à l' Selector
type de Swift. Depuis un Selector
peuvent être créés automatiquement à partir d'un littéral de chaîne en cas de besoin, il n'y a pas besoin de passer de l' Selector("string")
ou NSSelectorFromString("string")
.
Parce que les sélecteurs sont un ObjC chose, leurs chaînes de suivre ObjC méthode règles de nommage-pour une méthode qui prend un argument, le sélecteur se termine par un signe deux-points (":"). Par exemple, le sélecteur de chaîne pour une méthode nommée test()
est juste "test"
, mais le sélecteur pour l' test(this:String)
est "test:"
.
Notez également que la méthode référencée par le sélecteur doit être exposé à l'ObjC de l'exécution. C'est déjà le cas si il est dans une classe que (finalement) hérite de l' NSObject
, mais si c'est dans une pure Swift classe, vous aurez besoin de préface, que de la méthode de déclaration à l' @objc
.
À l'aide des sélecteurs est couvert en vertu de l'Interaction avec Objective-C Api dans l'Utilisation de Swift avec Cocoa et Objective-C.