首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中财产申报过程中的自我

Swift中财产申报过程中的自我
EN

Stack Overflow用户
提问于 2015-06-24 08:23:12
回答 3查看 732关注 0票数 1

我试图用下面的代码声明和初始化一个属性。

代码语言:javascript
复制
class ClassName: UIViewController {

  private let doneButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneButtonDidTapped")

   func doneButtonDidTapped() {
      println("Ulala!")
   }
}

但是,我得到了以下错误。

代码语言:javascript
复制
Cannot find an initializer for type 'UIBarButtonItem' that accepts an argument list of type '(title: String, style: UIBarButtonItemStyle, target: ClassName -> () -> ClassName, action: String)'

有人知道这是怎么回事吗?我是否应该放弃用声明初始化属性的尝试,而是对init()方法进行初始化?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-24 09:17:36

正如@giorashc所言,由于斯威夫特的两阶段初始化,self还没有被削弱,所以您不能这么做。

但我认为你可以创造一个懒惰的罪孽:

代码语言:javascript
复制
lazy private var doneButtonItem : UIBarButtonItem = {
    [unowned self] in
    return UIBarButtonItem(title: "Done", style:UIBarButtonItemStyle.Plain, target: self, action: "doneButtonDidTapped")
    }()
票数 7
EN

Stack Overflow用户

发布于 2017-01-12 22:27:21

@agy的答案中的闭包是不必要的,您可以这样做(在Swift 3中):

代码语言:javascript
复制
lazy var button:UIBarButtonItem = UIBarButtonItem(title: "Title", style: .plain, target: self, action: #selector(buttonPressed(_:)))
票数 2
EN

Stack Overflow用户

发布于 2015-06-24 08:33:21

由于斯威夫特的两阶段初始化,您需要初始化父类,然后才能在继承类中使用self

在您的实现中,self尚未由父类初始化,因此正如您所说的,您应该将它移动到视图控制器的init方法,并在调用父类的初始化方法后创建按钮

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31021390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档