这是一个简单的学术代码而不是真实代码。
我想使用performSelector函数运行打印方法。但是,如果我在操场上运行此代码,则会引发异常:
EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)。
代码:
//: Playground - noun: a place where people can play
import UIKit
@objc(Foo)
class Foo: NSObject {
func timer() {
self.performSelector( #selector(Foo.print))
}
@objc func print() {
NSLog("print")
}
}
let instance = Foo()
instance.timer() // <-- EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
问题出在哪儿?
尝试将您的内容更改Foo.print()
为以下形式:
@objc func print() -> AnyObject? {
NSLog("print")
return nil
}
我相信代码也可以在Playground中运行。
performSelector
的返回类型不是Void
。
func performSelector(_ aSelector: Selector) -> Unmanaged<AnyObject>!
因此,Playground尝试获取要显示的结果值。实际上哪个都不返回。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句