ios - 更新到 Swift 1.2 后出错

标签 ios xcode swift ios8 xcode6.3.2

我很快更新到 Xcode 6.3.2 附带的 Swift 1.2 并写了几行代码:

let originView:UIView!

  override init() {

      super.init()

  }

  init(sourceView:UIView, menuItems:Array<String>){

      super.init()

      originView = sourceView
  }

这段代码运行完美,直到我更新了新版本的 Xcode (6.3.2)。

现在我收到以下错误:Property 'self.originView' not initialized at super.init call

直到现在我都找不到解决方案,因为我还在学习 Swift。

有人知道我如何解决这个问题吗?

P.S 这不是 this question 的副本因为这段代码:init(sourceView:UIView, menuItems:Array<String>)而不是 override init(frame: CGRect) .

更新:

新代码:

override convenience init() {

    self.init()
}

init(sourceView:UIView, menuItems:Array<String>){

    originView = sourceView
    super.init()
}

新错误: Thread 1: EXC_BAD_ACCESS (code=2, address=0x7fff5f300ff8)在这行代码中:self.init()

最佳答案

尝试修改这部分。

 override init() {

      super.init()

  }

  override init() {

      self.init(UIView(), nil) // Or other initial values 

  }

如果这不能解决您的错误,这是更好的方法,因为 init() 调用您的自定义 init 并初始化您的变量。

编辑更新

您的修改不正确

  override convenience init() {

      self.init() // This init referred "override convenience init()" !! So recursive call

  }

您必须像我之前所说的那样提供 init 调用的参数,以便将“override convenience init()”重定向到“init(sourceView:UIView, menuItems:Array)”。

关于ios - 更新到 Swift 1.2 后出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874816/

相关文章:

objective-c - 在 uitableview 单元格中标记和取消标记框

ios - 在 Mapbox iOS SDK 中将 map 移动到标记下

ios - 单击时 UILabel 点击手势不起作用

iphone - 如何将 subview 放置在屏幕上的任何位置, 'Docking Views'

ios - tableView.cellForRow(at :) and tableView. dataSource?tableView(tableView:cellForRowAt:) 之间的区别

ios - UICollectionView - 选择随机单元格

ios - 导航 Controller 为空

ios - 为什么自动布局约束不是相对于 UIViewController View 的框架

ios - 在应用程序中备份和还原选件

swift - BitTrex 时间格式和时区