In Swift 2.3 konnte ich dynamisch Methoden aufrufen, die Parameter mit NSSelectorFromString("methodWithArg:")
benannt hatten. In Swift 3 muss ich _
einem benannten Parameter voranstellen, damit er ohne seinen Namen aufgerufen werden kann.NSSelectorFromString mit benannten Parametern in Swift 3
Ist das noch möglich? Sehen Sie sich diesen Spielplatzcode für einen Testfall an.
class Parent : NSObject {
func parentSelector(_ arg: String) {
print(" ---> Selected: \(arg)")
}
func test(_ selectorString: String, _ printString: String) {
let selector : Selector = NSSelectorFromString(selectorString)
// if self.responds(to: selector) {
self.perform(selector, with: printString)
// }
}
}
class Child : Parent {
func childSelector(_ arg: String) {
print(" ---> Child selected: \(arg)")
}
func namedChildSelector(arg: String) {
print(" ---> Child selected: \(arg)")
}
}
let parent = Parent()
parent.test("parentSelector:", "apple") // Works
let child = Child()
child.test("parentSelector:", "banana") // Works
child.test("childSelector:", "coffee") // Works
child.test("namedChildSelector:", "daffodil") // Throws `NSInvalidArgumentException`
child.test("namedChildSelector(_:)", "daffodil") // Throws `NSInvalidArgumentException`
'child.test (" namedChildSelectorWithArg: "," Narzisse ")' – vacawama
Ich habe beide versucht, beide geben einen Fehler. Ich werde bearbeiten, um zu zeigen, dass beide dasselbe tun. –
Sind Sie sicher? Die obige Linie funktioniert für mich auf einem Spielplatz. – vacawama