- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。
View Controller 没有初始化器
required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
IBOutletproperty 具有非可选类型“UILabel”
并且不断弹出此代码:
@IBOutlet var outputLabel : UILabel
但是当我添加一个!马克,它运行没有像这样的错误
@IBOutlet var outputLabel : UILabel!
IBActions 也会发生同样的事情...
最佳答案
首先要知道,什么是!
和?
?
:如果将来该值可以变为 nil,那么您对此进行测试。!
:如果它真的不应该在未来变成 nil,但它最初需要为 nil。@IBOutlet:
当您在 Swift 中声明一个 outlet 时,编译器会自动将该类型转换为一个弱隐式解包可选,并为其分配一个初始值 nil
。
实际上,编译器将 @IBOutlet var name:
Type 替换为 @IBOutlet weak var name: Type! = 无
。
Xcode 会更改它并强制限制声明 @IBOutlet
非选项类型变量,因此遵循 @IBOutlet
的两种声明直到日期都是有效的。
@IBOutlet var outputLabel : UILabel!
@IBOutlet var priceLabel : UILabel?
但是,如果您在 beta 4 中控制拖动标签的导出,则会发生这种情况:
@IBOutlet var priceLabel : UILabel! = nil
关于ios - IBOutlets 和 IBactions 需要!到底,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27541993/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!