当前位置: 首页 > 面试题库 >

在Swift中进行属性声明时引用self

萧晔
2023-03-14
问题内容

我正在尝试使用以下代码声明和初始化属性。

class ClassName: UIViewController {

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

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

但是,出现以下错误。

Cannot find an initializer for type 'UIBarButtonItem' that accepts an argument list of type '(title: String, style: UIBarButtonItemStyle, target: ClassName -> () -> ClassName, action: String)'

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


问题答案:

正如@giorashc所说,由于swift的两阶段初始化,self尚未被初始化,因此您不能这样做。

但是我认为您可以创建一个懒惰的初始化:

lazy private var doneButtonItem : UIBarButtonItem = {
    [unowned self] in
    return UIBarButtonItem(title: "Done", style:UIBarButtonItemStyle.Plain, target: self, action: "doneButtonDidTapped")
    }()


 类似资料:
  • 问题内容: 我希望能够用元数据注释我的类型和方法,并在运行时读取它们。 语言参考说明了如何声明属性用法,但实际上可以声明自己的属性吗? 阅读将需要某种反射机制,我根本无法在参考文献中找到这种反射机制,因此问题的第二部分可能是- 是否可能反射。如果这些功能在Swift中不可用,是否可以用Objective-C代码完成(但在Swift实例和类型上)? 相对不相关的注释:关于将什么建模为属性以及将哪些内

  • 本文向大家介绍详解Swift中属性的声明与作用,包括了详解Swift中属性的声明与作用的使用技巧和注意事项,需要的朋友参考一下 一、引言 属性将值与类,结构体,枚举进行关联。Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算属性用于计算一个值,其可以用于类,结构体和枚举。 二、存储属性 存储属性使用变量或者常量来存储一个值,在声明存储属性时,可以为其设

  • 问题内容: 我想在Swift中存储一系列弱引用。数组本身不应该是一个弱引用-它的元素应该是。我认为可可对此提供了非类型安全的版本。 问题答案: 创建通用包装,如下所示: 将此类的实例添加到您的数组。 定义时,可以使用或。 另外,为了帮助获取数组内容,您可以按照以下方式进行操作: 上面的用法应替换为-但我不认为当前的Swift语言允许这样定义扩展。

  • 问题内容: 我正在尝试做这样的事情: (而不是5,我不想执行两次返回一个数字的函数) 我可以重写它,以便稍后从分配,但是我可以在声明期间立即执行吗? 问题答案: JavaScript中的编号无法像您想象的那样工作。在这种情况下,指的是全局对象。 只有3种情况下会设置该值: 功能案例 这里将引用 全局 对象。 方法案例 在此示例中将参考。 构造案例 关键字前面的函数调用充当构造函数。函数内部将引用一

  • 问题内容: 对于上述代码,快速二进制文件抱怨“未处理错误,因为未将封闭函数声明为” throws”。 我如何在上面声明“ someProperty”“抛出”? 和 和 似乎不起作用。 问题答案: Swift 5更新:仍然不可能。 从Swift 3开始: 您不能从计算的属性中抛出。如果要抛出,必须使用一个函数。Swift编程语言末尾的“ 语言参考”部分的“声明”部分仅列出(和)作为函数和初始化声明的

  • 问题内容: 如何在Python中声明静态属性? 这里写了我如何声明一个方法: Python中的静态方法? 问题答案: 在Python的类级别定义的所有变量均被视为静态 在类中,您可以使用相同的名称拥有两个不同的变量(一个静态变量和一个普通变量)。不要困惑。