Swift5.0-类型转换

217 阅读2分钟

Swift 中使用 isas 操作符,用于去检查值的类型,或者转换它的类型。也可以用它来检查一个类型 是否遵循了某个协议。

is

is来检查一个实例是否属于特定子类型。若实例属于那个子类型,类型检查操作符返回 true,否则返回 false。

var movieCount = 0
var songCount = 0

for item in arr {
    if item is Movie {
        movieCount += 1
    } else if item is Song {
        songCount += 1
    }
}

向下转型

某类型的一个常量或变量可能在幕后实际上属于一个子类。当确定是这种情况时,你可以尝试用as? as!向下转到它的子类型。

因为向下转型可能会失败,类型转型操作符带有两种不同形式。条件形式 as? 返回一个你试图向下转成的类型的可选值;强制形式 as! 把试图向下转型和强制解包转换结果结合为一个操作。

当你不确定向下转型可以成功时,用as?。总是返回一个可选值,且若下转是不可能的,可选值将是 nil。这使你能够检查向下转型是否成功。

只有你可以确定向下转型一定会成功时,才使用as!。当你试图向下转型为一个不正确的类型时,会触发一个运行时错误。

for item in arr {
    if let movie = item as? Movie {
        print("电影: \(movie.name)")
    } else if let song = item as? Song {
         
    }
}

// item as? Movie 的返回值是 Movie?

if let movie = item as? Movie,可以这样解读: “尝试将 item 转为 Movie 类型。若成功,则将返回的 可选项Movie?解包,赋值给临时常量 movie

转换没有真的改变实例或它的值。根本的实例保持不变;只是简单地把它作为它被转换成的类型来使用。