当前位置: 首页 > 知识库问答 >
问题:

IBOutlet和IBaction需要!在最后

袁运良
2023-03-14

今天我试着从Obj-C出发,去Swift,我正在阅读文档。我试图用Swift创建一个简单的IBOutlet,但它总是给我这些错误。

视图控制器没有初始化器

必需的init(coder-aDecoder:NSCoder){fatalError(“init(coder:)尚未实现”)}

IBOutletproperty具有非可选类型“UILabel”

这段代码会不断弹出:

@IBOutlet var outputLabel:UILabel

但当我添加一个!马克,它运行时没有像这样的错误

@IBOutlet var outputLabel:UILabel!

同样的事情也发生在iBaction上。。。

共有3个答案

江德润
2023-03-14

没错。在Swift中,X类型的变量不能为nil,这意味着它必须被初始化。这意味着您必须在init方法中初始化,或者内联初始化。

通常,视图控制器会声明可选类型的变量——例如,

@IBOutlet var outputLabel:UILabel!

这意味着您不需要初始化outputLabel,默认情况下,它的值为nil。这是IBOutlet变量的一般模式,因为变量设置在init方法之外。

如果您不将变量设为可选,则必须对其进行初始化。如果您不内联初始化,则必须提供init方法-因此您会收到错误。

丌官向荣
2023-03-14

Interface builder数据是在视图控制器启动后加载的,因此在初始化后插座不能有值。对于隐式展开的可选属性(在本例中为outlets),您promise在启动对象后,属性可能为零,但它们的值将在稍后分配(在加载nib或storyboard后)。

夹谷承安
2023-03-14

首先要知道,什么是真正的

  • 使用 :如果该值将来可能变为零,那么您可以对此进行测试
  • 使用 :如果将来它真的不应该变为零,但最初它需要为零

@IBOutlet:

在Swift中声明出口时,编译器会自动将该类型转换为弱隐式展开可选类型,并为其指定一个初始值nil

实际上,编译器将@IBOutlet var name:Type替换为@IBOutlet弱var name: Type!=nil

Xcode将更改它并强制限制声明@IBOutlet非选项类型变量,因此遵循@IBOutlet的两种声明在日期之前都是有效的。

@IBOutlet var outputLabel : UILabel!
@IBOutlet var priceLabel : UILabel?

但是,如果在beta 4中控制并拖动标签的出口,则会发生以下情况:

@IBOutlet var priceLabel : UILabel! = nil

 类似资料:
  • 问题内容: 在Xcode和Interface Builder中使用IBOutlet和IBAction的目的是什么? 如果我不使用IBOutlets和IBAction,有什么区别吗? 迅速: 目标C: 问题答案: 和是定义为表示可以在Interface Builder中引用的变量和方法的宏。 解析为与解析为什么,但他们表示,以Xcode和接口生成器,这些变量和方法可以在Interface Build

  • 在模块声明中,requires和requires可传递模块语句之间有什么区别 例如:

  • 问题内容: 我正在编写一个Web应用程序,我需要将图像从servlet发送到客户端。图像是动态生成的,并且很大(+ -2MB)。可能是jpeg,png或gif。 现在,我正在使用ImageIO.write()将图像写入输出流,但是其速度很慢。客户最多需要6秒钟才能看到图像。我需要加快速度。 有什么建议? 顺便说一句 我知道正在寻找ImageIO主题的更快替代方案。但这并没有帮助我。由于使用PNG的

  • 我必须在下面的地图中输入一个整数值。 当我运行上面的代码我得到下面的错误,有人能帮我吗

  • “元素形状没有必需的属性Android:layout_height” 和另一个错误: “元素形状没有必需的属性Android:layout_width” 我尝试设置和和,,错误消失了,但是我不能设置任何按钮将其作为背景...所以我不能以这种方式使用这个XML。 我应该把它们调成什么?

  • 我试图从黑莓的本机日历中读取“day”值,该值以整数形式返回,并映射到一周中每一天的值。这些值如下所示: 周一:32768 星期二:16384 周三:8192 周四:4096 周五:2048 sat:1024 孙:65536 如果事件发生在一天内,我可以看到值是否为mon/tue/we/thu/fri/sat/sun 值也与星期一值相同。 现在的问题是,如果事件发生在两天或三天以上 返回所选天数的