iOS Swift No.14 - 构造 5

本文深入探讨Swift中的可失败构造器,包括枚举中的应用,如如何定义和使用失败构造器,以及失败构造过程的传播机制。通过实例解释了如何在枚举中实现失败构造器,以及如何处理构造失败的情况。
摘要由CSDN通过智能技术生成

第十四章 构造

6. Failable Initializers (可失败构造器)

我们有时候可以为一个类,结构体或者枚举定义一个可失败的构造器。也就是说为类,结构体或者枚举属性值在构造过程中可能会失败,这种失败的行为可能会被一个在构造过程中传入一个无效的参数值,一个该类型所需要的外部资源或其他可预防构造过程成功的条件所触发。这三种行为均可导致该类型的构造器失败,

可以用init?作为一个可选类型返回nil的构造器来介绍并引出这个可失败的构造器。可以类,结构体或枚举定义里面的一个或多个构造器定义为可失败的构造器(可选类型的构造器)。来指明该类型的失败构造过程可以被某种行为所触发。

下面的实例可以说明失败构造器的用途,一个失败构造器可以用来做数字类型的转换,使用init(exactly: ) 构造器来确定数字类型中是否存在一个具体值。如果说这个转换不成立 那么就可以说这个构造器失败了(完整的构造过程不能被触发)。下面的例子会详细说明。

let wholeNumber: Double = 12345.0
let pi = 3.14159
/* wholeNumber参数名 Double参数类型 exactly实参标签
	if let为可选绑定详情参考前几章 
	用if let来强制把一个类型为Double的wholeNumber转化为Int类型的wholeNumber */
if let valueMaintained = Int(exactly: wholeNumber) {
   
    print("\(wholeNumber) conversion to Int maintains value of \(valueMaintained)")
}
/* 实例化后的调用会导致构造器过程失败
	构造过程失败会有三种行为所触发
	在构造过程中传入一个无效的值时会触发
	所以该失败构造器会返回nil
	原本该传入的值是一个整数Int
	但pi在定义的时候却是小数 
	故失败构造器被传入的无效值触发*/
let valueChanged = Int(exactly: pi)
/* 这个转换数字类型的构造器,构造过程失败了 他会返回nil
	用if条件语句来判断*/
if valueChanged == nil {
   
	// 如果这个构造器失败 就会输出下面这行 反之则不输出
    print("\(pi) conversion to Int does not maintain value")
}

下面这个例子定义了一个结构体Animal,和一个String类型的常量属性,一个类型为String的空参数失败构造器,因为呢这个构造器的参数为空所以失败构造过程会被触发。除非这个结构体的属性species的空白值可以重新设置,这样整个构造过程才会成功。

struct Animal {
   
	// 结构体的常量 没有给出值的情况下 默认是空白(Empty)值
    let species: String
    init?(species: String) {
   
        if species.isEmpty {
    return nil 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值