Swift - is和as

227 阅读1分钟

在Swift当中,我们经常会遇到类型判断的相关需求。本文介绍了如何使用 isas 以及Typetype(of:) 的相关用法。

一、is

  • is 用于检查某个实例是否属于某个类型。“类型”所设计的面很广,不单单是我们我们经常使用的 classprotocol 也可以作为判断的条件,我们可以判断某个实例是否是属性某个协议下的。

  • 使用is做类型检查时会返回一个布尔值。

二、as

as 用于尝试将一个实例转为另一个类型,注意是“尝试”,因为有可能转换失败。

三、Type与type(of:)

Type 表示某个类型的元类型。type(of:) 用于在运行时动态获取某个实例的类型。

示例代码:

import UIKitprotocol SomeBody {    
    var sexy: String { get }
}

class PersonModel: NSObject, SomeBody {
    var sexy: String    
    var name: String?
    init(sexy: String) {       
      self.sexy = sexy    
    }
}

class Boy: PersonModel {
}

class Girl: PersonModel {
}


struct BoyOrGirl: SomeBody {
    var sexy: String
    let name: String
}


func someOperation(person: PersonModel) {
    if let p = person as? Boy, let name = p.name {
        print("👦🏻:\(name) - \(p.sexy)")
    }
    
    if case let p as Girl = person, let name = p.name {
        print("👧🏻:\(name) - \(p.sexy)")
    }
}


func someOperation2(person: SomeBody) {
    if person is BoyOrGirl {
        print("BoyOrGirl")
    }
}


let girl = Girl(sexy: "女")
girl.name = "丽丽"
let boy = Boy(sexy: "男")
boy.name = "小明"
let other = BoyOrGirl(sexy: "X", name: "Jones")


someOperation(person: girl)
someOperation(person: boy)
someOperation2(person: other)