Swift_可选类型(Optionals)

本文介绍了Swift中可选类型Optionals的概念及其重要性。当类的存储属性没有默认值时,编译器会报错。为解决此问题,提出了三种方案:设置属性默认值、将属性设为可选类型或隐式解包可选类型。文章详细讨论了可选类型的使用、强制解包以及隐式解包可选类型与普通可选类型的区别,并提供了代码示例进行说明。
摘要由CSDN通过智能技术生成
  • 说明:
    • 文中提到的”构造器”和Object_C中的”初始化”类似.
    • 博文中的代码仅为讲解知识, 没有成型的项目Demo.
    • 资料链接Swift2.0(中文版)
    • 举例: (构造过程–默认构造器) 代表前面的文字出自”构造过程”这章中的”默认构造器”小节.
    • 建议看一看Swift2.0中的(基础部分– 可选, nil, if语句以及强制解析, 可选绑定, 隐私解析可选类型) 和 (构造过程–存储属性的初始赋值, 默认构造器, 类的继承和构造过程)
  • 此文章由 @春雨 编写. 经 @Scott 审核. 若转载此文章,请注明出处和作者

代码

class ViewController: UIViewController {


    var titleString: String /**< 这样写属性, 编译器会报错: Class 'ViewController' has no initializers. */

}

原因:

  • 一个类的所有存储属性(包括从父类继承来的任何属性)必须在构造过程中设置初始值.(构造过程–类的继承和构造过程)
  • 如果结构体或类的所有属性都有默认值,同时没有自定义的构造器,那么 Swift 会给这些结构体或类提供一个默认构造器(default initializers)。这个默认构造器将简单地创建一个所有属性值都设置为默认值的实例.(构造过程–默认构造器)

  • 综上所述, 由于titleString属性没有默认值, ViewController这个类的默认构造器就不能在构造过程中为titleString设置初始值, 所以编译器报错.

解决方案:

  • 方案一: 为属性设置默认值.
  • 方案二: 将属性设置为可选类型.
  • 方案三: 将属性设置为隐式解包可选类型.

方案一: 为属性设置默认值.


    class ViewController: UIViewController {

    // 为存储属性设置默认值, 此时属性类型为: String类型.   
    var titleString: String = "Today"
}

方案二: 将属性设置为可选类型.


class ViewController: UIViewController {

    // 在String后面加上?, 此时属性的类型为: Optional String类型. 
    var titleString: String?

}
  • 解释:
    • 在类型名后面加?, 这个类型就变成可选类型(例如: Int? 代表 Optional Int 类型, 而不是 Int类型.)
    • 声明一个可选类型的常量或者变量, 但没有赋值时, 它们会自动被设置为nil.(基础部分–nil)
! 强制解包
注: 解包也叫解析. 这是翻译问题.
代码
class ViewController: UIViewController {

    var titleString: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        titleString = "Hello"

        let appendString = titleString + " World!" /*< 编译器报错: Value of optiona
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值