我接到这个电话:

myObject.perform(Selector("setCellSize:"), with: CGSize(width: 50.0, height: 50.0))

在课堂上我有:
func setCellSize(_ size: CGSize) {
    print(size)
    self.itemSize = size
}

方法被正确调用,但它会打印(0.0, 7.2911220195564e-304)。怎么了?

最佳答案

perform(_:with:)是来自
以对象作为参数向接收器发送消息。
特别地,
aSelector应标识接受类型id的单个参数的方法。对于具有其他参数类型和返回值的方法,请使用NSInvocation。
如果你真的要通过这个方法通过aNSObjectProtocol,那么你可以
把它包装成一个CGSize

let value = NSValue(cgSize: CGSize(width: 50.0, height: 50.0))
myObject.perform(#selector(setCellSize(_:)), with: value)


func setCellSize(_ size: NSValue) {
    print(size.cgSizeValue)
}

关于swift - Swift-使用CGSize执行选择器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44008399/

10-11 14:20