我有一个Swift项目,我想在UIButton的tap事件中附加一个方法.我有以下代码:
class MyClass {
let myButton = UIButton(frame: CGRectMake(50, 50, 100, 50))
init() {
myButton.addTarget(self, #selector(self.didTap(_:)), forControlEvents: .TouchUpInside)
}
func didTap(sender: UIButton) {
print("Tapped")
}
}
Run Code Online (Sandbox Code Playgroud)
XCode突出了我的addTarget界限并说:
Argument of '#selector' refers to a method that is not exposed to Objective-C
Run Code Online (Sandbox Code Playgroud)
如果我添加@objc前缀到我func didTap喜欢它建议然后一切正常.
我的构建设置中是否启用了某些导致此奇怪行为的内容?
PS.我在7.3.1中得到了这种行为.但是,如果我在7.2.1中尝试这个,它不接受#selector(method(_:))语法,并且Selector("method:")工作正常.
如何在Swift中定义只读属性?我有一个父类,需要定义一个公共属性,例如。itemCount。这是我的代码:
Class Parent: UIView {
private(set) var itemCount: Int = 0
}
class Child {
private(set) override var itemCount {
get {
return items.count
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到错误: Cannot override mutable property with read-only property
我不能使用协议,因为它们不能从类(UIView)继承
我将一个添加var view = UIView到我的Child类中,并UIView从Parent该类中删除继承。这似乎是唯一可能的方法,但是在我的实际项目中,似乎做错了事,例如。addSubview(myCustomView.view)
UIView的Child类我也不能这样做,因为我打算拥有多个Child具有不同属性和行为的相关类,并且我需要能够将Child类的实例声明为Parent类,以利用UIView'属性和Parent'公共属性。