Objective-C转Swift问题小记

  1. responds(to:)编译器报错: Cannot find 'setWindow' in scope
delegate.responds(to: #selector(setWindow:))

解决路径:
首先,采用OC代码

if ([delegate respondsToSelector:@selector(setWindow:)]) {
    [delegate setWindow:window];
}

然后,在https://okaxaki.github.io/objc2swift/online.html 上转成swift代码(老版本Swift代码)

if subDelegate.respondsToSelector(Selector("setWindow:")) {
    subDelegate.window = window
}

注意这里Selector("setWindow:"),这种方式有一个优势是,只需要字符串就能生成一个Selector,但是IDE会报一个警告。如果不想要警告,就需要转成#selector(setter: self.window),需要当前文件提供一个属性window.
即,复制代码到Xcode中,根据IDE的提示,更新代码,最后得到代码:

let setWindowSel = #selector(setter: self.window)
if delegate.responds(to: setWindowSel) {
    delegate.perform(setWindowSel, with: window)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。