- 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)
}