【问题标题】:Swift - Define properties inside classSwift - 在类中定义属性
【发布时间】:2014-09-29 13:32:39
【问题描述】:

我正在学习 Swift 并在第一个 XCode Beta 上开发我的测试项目,但几天前我下载了 XCode Beta4,但在构建中显示错误。

我的代码:

class LoginModalViewController: UIViewController {

  @IBOutlet var usernameField : UITextField
  @IBOutlet var passwordField : UITextField
  @IBOutlet var loginButton : UIButton

  ...

以前我是这样在控制器中定义插座的,但在新的测试版中,它给了我一个错误IBOutlet property has non-optional type UITextField,并建议我通过两种方式修复它:

  • 在每个变量后添加!
  • 在每个变量后添加?

我知道? 表示可选,如果我选择它,那么我需要将usernameField.becomeFirstResponder() 之类的代码更新为usernameField!.becomeFirstResponder()

添加! 完美解决错误..

据我所知,在类中创建属性只有这两种方法,对吗?

查找此类 Swift 语法语言更新的更新日志会很方便。

【问题讨论】:

  • 阅读 Beta5 发布文档。 “UIView、NSView、UIFont 和 UIApplicationDelegate 类已针对可选一致性进行了审核,从它们的接口中删除了大多数隐式展开的可选选项。这阐明了它们的属性和参数/方法的返回值的可空性。Beta 5 中的更改很简单第一步;SDK 的更多改进将在未来的 beta 版本中推出。(17892713)!我怀疑这也包括他们的子类。
  • @Zaph 你能看看这个 - stackoverflow.com/questions/25164313/… 吗?也打破了新的测试版..
  • 我不使用 Swift 编写代码,也无意这样做。我正在学习该语言并阅读发行说明。

标签: ios xcode swift var iboutlet


【解决方案1】:

实际上,像var usernameField : UITextField 这样的东西在 Swift 中是一个完全有效的属性声明,即使它没有被声明为可选项。在您的 Swift 版本中,您遇到的问题是带有 @IBOutlet 注释的属性必须是可选的。

可以在 Xcode 6 beta 发行说明here 中找到对 Swift 语言的更改。

附带说明,既然您提到您已更新到 Xcode Beta 4,我想指出,在撰写本文时,Xcode Beta 5 刚刚在 2 天前发布 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多