gpt4 book ai didi

swift - Xcode 7.3, swift 2.2 : default initialiser selector (new compile-time check)

转载 作者:可可西里 更新时间:2023-11-01 01:36:44 30 4
gpt4 key购买 nike

我正在将一些选择器迁移到 Swift 2.2,但我遇到了其中一个问题:

Init string selector

代码:

let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod("init") { // Default initialiser
presenceQueryWasCreated = true
}

现在,Xcode 想帮助我进行转换,但方式不对:

enter image description here

代码:

let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod(#selector(_NSEnumeratorType.init)) { // Default initialiser
presenceQueryWasCreated = true
}

我尝试修复它:

enter image description here

代码:

let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod(#selector(ARTRealtimePresenceQuery.init)) { // Default initialiser
presenceQueryWasCreated = true
}

所以,我的问题是:如何使用新的 #selector 语法选择默认的初始化方法?

(它在 Swift 2.0 中工作。)

当前错误:

‘init()’的使用不明确

更新 1:

ARTRealtimePresenceQuery 初始化器:

- (instancetype)init;
- (instancetype)initWithClientId:(nullable NSString *)clientId connectionId:(nullable NSString *)connectionId;
- (instancetype)initWithLimit:(NSUInteger)limit clientId:(nullable NSString *)clientId connectionId:(nullable NSString *)connectionId;

最佳答案

所示

将无参数变体称为几个重载之一方法需要明确的 as <signature> throw 。该方法也可以应用于 init 方法:

class MyClass : NSObject {

override init() { }

init(s : String) { }
}

// Selector referring to init():
let sel1 = #selector(MyClass.init as () -> MyClass)

// Selector referring to init(s : String):
let sel2 = #selector(MyClass.init as (String) -> MyClass)

所以在你的情况下会是

#selector(ARTRealtimePresenceQuery.init as () -> ARTRealtimePresenceQuery)

关于swift - Xcode 7.3, swift 2.2 : default initialiser selector (new compile-time check),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36518024/

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