小编Jas*_*son的帖子

Swift希望#selector的参数暴露给Objective-C

我有一个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:")工作正常.

xcode objective-c ios swift

25
推荐指数
2
解决办法
1万
查看次数

在Swift中定义一个只读属性

如何在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


选项1-协议:

我不能使用协议,因为它们不能从类(UIView)继承

选项2-组成:

我将一个添加var view = UIView到我的Child类中,并UIViewParent该类中删除继承。这似乎是唯一可能的方法,但是在我的实际项目中,似乎做错了事,例如。addSubview(myCustomView.view)

选择3 -子类UIViewChild

我也不能这样做,因为我打算拥有多个Child具有不同属性和行为的相关类,并且我需要能够将Child类的实例声明为Parent类,以利用UIView'属性和Parent'公共属性。

xcode uiview ios swift xcode8

5
推荐指数
1
解决办法
9067
查看次数

标签 统计

ios ×2

swift ×2

xcode ×2

objective-c ×1

uiview ×1

xcode8 ×1