gpt4 book ai didi

swift - NSSelectorFromString 在 Swift 3 中带有命名参数

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:25 27 4
gpt4 key购买 nike

在 Swift 2.3 中,我可以使用 NSSelectorFromString("methodWithArg:") 动态调用具有命名参数的方法。在 Swift 3 中,我必须将 _ 添加到命名参数之前,以允许在没有名称的情况下调用它。

这还有可能吗?请参阅此 Playground 代码以获取测试用例。

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`

最佳答案

在 Swift 3 中,第一个参数名称是选择器名称的一部分,因此如果第一个参数名称是 arg,则需要添加 WithArg:

child.test("namedChildSelectorWithArg:", "daffodil")

关于swift - NSSelectorFromString 在 Swift 3 中带有命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com