iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Swift初始化器与可选链的使用方法介绍
  • 595
分享到

Swift初始化器与可选链的使用方法介绍

2024-04-02 19:04:59 595人浏览 安东尼
摘要

目录初始化器required属性观察器可失败初始化器反初始化器(deinit)可选链(Optional Chaining)初始化器 required 用required修饰指定初始化

初始化器

required

用required修饰指定初始化器,表明其所有子类都必须实现该初始化器(通过继承或者重写实现)

如果子类重写了required初始化器,也必须加上required,不用加上override

class Person {
    required init() {}
    init(age: Int) {}
}
class Student: Person {
    init(no: Int) {
        super.init(age: 0)
    }
    required init() {
        super.init()
    }
}

属性观察器

父类的属性在它自己的初始化器中赋值不会触发属性观察器,但在子类的初始化器中赋值会触发属性观察器

class Person {
    var age: Int {
        willSet {
            print("willSet", newValue)
        }
        didSet {
            print("didSet", oldValue, age)
        }
    }
    init() {
        self.age = 0
    }
}
class Student: Person {
    override init() {
        super.init()
        self.age = 1
    }
}

可失败初始化器

类、结构体、枚举都可以使用init?定义可失败初始化器

class Person {
    var name: String
    init?(name: String) {
        if name.isEmpty {
            return nil
        }
        self.name = name
    }
}

不允许同时定义参数标签、参数个数、参数类型相同的可失败初始化器和非可失败初始化器

可以用init!定义隐式解包的可失败初始化器

可失败初始化器可以调用非可失败初始化器,非可失败初始化器调用可失败初始化器需要进行解包

class Person {
    var name: String
    init?(name: String) {
        if name.isEmpty {
            return nil
        }
        self.name = name
    }
    convenience init() {
        self.init(name: "")!
    }
}

如果初始化器调用一个可失败初始化器导致初始化失败,那么整个初始化过程都失败,并且之后的代码都停止执行

可以用一个非可失败初始化器重写一个可失败初始化器,但反过来是不行的。

反初始化器(deinit)

deinit叫做反初始化器,类似于c++的析构函数、OC中的dealloc方法

当类的实例对象被释放内存时,就会调用实例对象的deinit方法

class Person {
    deinit {
        print("Person对象销毁了")
    }
}

deinit不接受任何参数,不能写小括号,不能自行调用

父类的deinit能被子类继承

子类的deinit实现执行完毕后会调用父类的deinit

可选链(Optional Chaining)

class Car {
    var price = 0
}
class Dog {
    var weight = 0
}
class Person {
    var name: String = ""
    var dog: Dog = Dog()
    var car: Car? = Car()
    func age() -> Int {
        18
    }
    func eat() {
        print("Person eat")
    }
    subscript(index: Int) -> Int {
        return index
    }
}
var person: Person? = Person()
var age = person?.age()//Int? Optional(18)
var age1 = person!.age() // Int
var name = person?.name //String?
var index = person?[6] // Int?

如果可选项为nil,调用方法、下标、属性失败,结果为nil

如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项

如果结果本来就是可选项,不会进行再次包装

判断方法有没有调用成功:

if let age = person?.age() { // ()?
    print("调用age成功", age)
} else {
    print("调用age失败")
}

形成可选链:

多个?可以链接在一起

如果链中任何一个节点是nil,那么整个链就会调用失败,可选链应用的地方还是很多的,在OC里面我们通常会加很多判断以避免崩溃,在Swift里面,因为有了可选链会减少很多我们自己的判断,提高了安全性。

var dog = person?.dog // Dog?
var weight = person?.dog.weight // Int?
var price = person?.car?.price // Int?
var scores = [
    "Jack" : [86, 82, 84],
    "Rose" : [79, 94, 81]
]
scores["Jack"]?[0] = 100
scores["Rose"]?[2] += 10
scores["Kate"]?[0] = 88
var num1: Int? = 5
num1? = 10 // Optional(10)
var num2: Int? = nil
num2? = 10 // nil
var dict: [String : (Int, Int) -> Int] = [
    "sum" : (+), //两个Int类型相加,返回一个Int类型
    "difference" : (-)
]
var result = dict["sum"]?(10, 20) // Optional(30), Int?

到此这篇关于Swift初始化器与可选链的使用方法介绍的文章就介绍到这了,更多相关Swift初始化器与可选链内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Swift初始化器与可选链的使用方法介绍

本文链接: https://www.lsjlt.com/news/165851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Swift初始化器与可选链的使用方法介绍
    目录初始化器required属性观察器可失败初始化器反初始化器(deinit)可选链(Optional Chaining)初始化器 required 用required修饰指定初始化...
    99+
    2024-04-02
  • Swift初始化方法的使用介绍
    目录初始化初始化器初始化器的相互调用两段式初始化安全检查重写自动继承初始化 初始化器 1、类、结构体、枚举都可以定义初始化器 class Size { init(age: I...
    99+
    2024-04-02
  • Swift中类与结构的初始化方法
    本篇内容主要讲解“Swift中类与结构的初始化方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swift中类与结构的初始化方法”吧!一,结构的初始化struct FirstStruc...
    99+
    2023-06-29
  • Java中ArrayList初始化的四种方法的介绍
    本篇内容主要讲解“Java中ArrayList初始化的四种方法的介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中ArrayList初始化的四种方法的介绍”吧!1 起因在实际业务开发中...
    99+
    2023-06-14
  • python 中defaultdict()对字典进行初始化的用法介绍
    目录用法讲解:1. 不使用defaultdict(): 2. 使用defaultdict(): 用法讲解: 一般情况下,在使用字典时,先定义一个空字典(如dict...
    99+
    2024-04-02
  • CSS3选择器的使用方法介绍
    这篇文章主要讲解了“CSS3选择器的使用方法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS3选择器的使用方法介绍”吧!一 通用选择器1 ...
    99+
    2024-04-02
  • IntelliJ IDEA使用git初始化仓库的使用方法
    使用方法  首先在Github或者Gitee上面新建一个仓库 复制仓库的链接 用idea在本地新建一个demo项目 点击菜单栏的VCS,按照下图进行选择,选择新建的...
    99+
    2024-04-02
  • victoriaMetrics库布隆过滤器初始化及使用的方法
    本篇内容主要讲解“victoriaMetrics库布隆过滤器初始化及使用的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“victoriaMetrics库布隆过滤器初始化及使用的方法”吧!vi...
    99+
    2023-06-29
  • Angular管道PIPE的介绍与使用方法
    前言 PIPE,翻译为管道。Angular 管道是编写可以在HTML组件中声明的显示值转换的方法。Angular 管道之前在 AngularJS 中被称为过滤器,从 Angular ...
    99+
    2024-04-02
  • C++11中初始化列表initializer lists的使用方法
    C++11引入了初始化列表来初始化变量和对象。自定义类型,如果想用初始化列表就要包含initializer_list头文件。 C++11将使用大括号的初始化(列表初始化)作为一种通用...
    99+
    2024-04-02
  • java中序列化与反序列化的概念和使用方法介绍
    这篇文章主要介绍“java中序列化与反序列化的概念和使用方法介绍”,在日常操作中,相信很多人在java中序列化与反序列化的概念和使用方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中序列化与反序...
    99+
    2023-06-20
  • Windows7的上帝模式的介绍与开启使用方法介绍(图文)
    GodMode的字面释义是:上帝模式。能够以此冠名,想来定有其非常之处。   简单来说,上帝模式可以理解为一个快捷方式;能籍其实现对系统设定的集中控制,让操作变得更简洁;只需鼠标轻轻一点,几乎所有设置,都可在一个窗口中找...
    99+
    2023-05-26
    win7上帝模式 介绍 开启 模式 使用 方法
  • Python装饰器的介绍及使用方法
    本篇内容主要讲解“Python装饰器的介绍及使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python装饰器的介绍及使用方法”吧!app = Flask(__name...
    99+
    2023-06-17
  • 阿里云邮箱SMTP服务器介绍与使用方法
    阿里云邮箱SMTP服务器是阿里云提供的一种电子邮件服务,用户可以通过SMTP协议发送和接收电子邮件。本文将详细介绍阿里云邮箱SMTP服务器的使用方法和特点。 一、什么是SMTP服务器?SMTP(Simple Mail TransferPro...
    99+
    2023-12-12
    阿里 使用方法 邮箱
  • Java中方法的使用、重载与递归的详细介绍
    目录一.方法的基本使用1.什么是方法2.方法基本语法二.方法的重载1.重载的作用2.重载的使用规则三.方法的递归1.递归的概念2.递归执行过程分析3.递归练习1.按顺序打印一个数字的...
    99+
    2024-04-02
  • Vue使用Echarts图表多次初始化报错问题的解决方法
    目录问题方法一 销毁实例方法二 不要频繁创建实例总结问题 Vue项目中需要用Echarts的柱状图显示数据,并且每次搜索要更新柱状图。 这时候小编发现在控制台会出现这样的报错: ...
    99+
    2024-04-02
  • 阿里云ecs授时服务的详细介绍与使用方法
    本文将详细介绍阿里云ecs授时服务,包括服务的定义、功能、使用方法以及相关的案例应用等。授时服务介绍:阿里云ecs授时服务,是阿里云提供的一个时间同步服务,可以帮助用户将本地时间与阿里云的时间保持一致。它提供了一种简单且可靠的方式,让用户...
    99+
    2024-01-26
    阿里 详细介绍 使用方法
  • Python模块对Redis数据库的连接与使用方法介绍
    这篇文章主要讲解了“Python模块对Redis数据库的连接与使用方法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python模块对Redis数据库的连接与使用方法介绍”吧!下面看看P...
    99+
    2023-06-20
  • CSS上下文选择器与使用DOM节点的方法
    本篇内容主要讲解“CSS上下文选择器与使用DOM节点的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS上下文选择器与使用DOM节点的方法”吧!   S...
    99+
    2024-04-02
  • Py的itchat库:python开发神器之itchat的介绍、安装、使用方法详解
    Py的itchat库:python开发神器之itchat的介绍、安装、使用方法详解 itchat是一款基于微信协议的Python接口库,通过itchat可以实现对微信消息的自动回复、获取好友列表等功能...
    99+
    2023-10-25
    python 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作