Swift - 使用CGSize执行选择器

时间:2017-05-16 17:54:10

标签: swift selector

我有这个电话:

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)。有什么问题?

2 个答案:

答案 0 :(得分:2)

perform(_:with:)是来自NSObjectProtocol

的方法
  

以对象作为参数向接收者发送消息。

特别是

  

aSelector应该标识一个采用id类型的单个参数的方法。对于具有其他参数类型和返回值的方法,请使用NSInvocation。

如果你真的必须通过这种方法传递CGSize,那么你可以 将其包装成NSValue

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


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

答案 1 :(得分:1)

CGSize不是对象。它是一个结构。你打印的胡言乱语传递给你的二传手。对于对象,该函数仅