我有Test
类button_action
可选闭包:
class Test : CustomViewFromXib {
var button_action : (() -> ())?
@IBAction func button_pressed(sender: AnyObject) {
if let action = button_action {
action()
}
}
}
这就是我使用这个类的方法:
let test_view = Test(frame: CGRect.nullRect)
self.view.addSubview(test_view)
test_view.button_action = {
() -> () in
print("test")
}
我遇到EXC_BAD_ACCESS
错误:
test_view.button_action = {
() -> () in
print("test")
}
我不知道为什么,因为我只是想设置初始值。有可能这样做吗?
我明白,不能从我的对象中调用任何属性或方法。不仅是闭包,还有弦乐(例如)。
这是我重现问题的代码示例。我想初始化程序有问题... https://www.dropbox.com/s/1d8fvxm0es9b5n4/TestInit.zip
(XCode 6 Beta 5)
答案 0 :(得分:0)
编写代码
let test_view = Test(frame: CGRect.nullRect)
self.view.addSubview(test_view)
test_view.button_action = {
() -> () in
print("test")
}
而不是
let test_view = Test(frame: CGRect.nullRect)
self.view.addSubview(test_view)
test_view.button_action = { [unowned self]
() -> () in
print("test")
}
这是详细的理论答案 Shall we always use [unowned self] inside closure in Swift https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html