[swift] is & as、Any & AnyObject

[swift] is & as、Any & AnyObject,第1张

概述is & as 是用于swift 的类型检测 用简单的话来说就是: is 是判断某个实例是否是某种类型的子类型 as 用于类型转换, 将父类类型的实例转换成子类类型, as? 试图向下转换,如果不能成功则返回nil as!试图向下转换,并强制解包 class FatherClass { var name: String init(name: String) { se is & as

是用于swift 的类型检测

用简单的话来说就是:

is 是判断某个实例是否是某种类型的子类型
as 用于类型转换, 将父类类型的实例转换成子类类型,

as? 试图向下转换,如果不能成功则返回nil
as!试图向下转换,并强制解包

class FatherClass {    var name: String    init(name: String) {        self.name = name    }}class SubClassA: FatherClass {    var proA: String    init(name: String,proA: String) {        self.proA = proA        super.init(name: name)    }}class SubClassB: FatherClass {    var proB: String    init(name: String,proB: String) {        self.proB = proB        super.init(name: name)    }}let dic = [    SubClassA(name: "One",proA: "A pro one"),SubClassA(name: "Two",proA: "A pro two"),SubClassB(name: "Three",proB: "B pro one"),SubClassA(name: "Four",proA: "A pro three"),SubClassA(name: "Five",proA: "A pro four")]for item in dic {    if item is SubClassA {        print("\(item.name) is SubClassA")    } else if item is SubClassB {        print("\(item.name) is SubClassB")    }}//One is SubClassA//Two is SubClassA//Three is SubClassB//Four is SubClassA//Five is SubClassAfor item in dic {    if let subClassA = item as? SubClassA {        print("SubClassA: '\(subClassA.name)',proA. \(subClassA.proA)")    } else if let subClassB = item as? SubClassB {        print("SubClassB: '\(subClassB.name)',proB. \(subClassB.proB)")    }}//SubClassA: 'One',proA. A pro one//SubClassA: 'Two',proA. A pro two//SubClassB: 'Three',proB. B pro one//SubClassA: 'Four',proA. A pro three//SubClassA: 'Five',proA. A pro four
Any & AnyObject

两种不确定类型

AnyObject可以代表任何class类型的实例。
Any可以表示任何类型,除了方法类型(function types)。

var things = [Any]()things.append(0)things.append(0.0)things.append(42)things.append(3.14159)things.append("hello")things.append((3.0,5.0))things.append(SubClassA(name: "Six",proA: "A pro five"))things.append(SubClassB(name: "Seven",proB: "B pro two"))for thing in things {    switch thing {    case 0 as Int:        print("zero as an Int")    case 0 as Double:        print("zero as a Double")    case let someInt as Int:        print("an integer value of \(someInt)")    case let someDouble as Double where someDouble > 0:        print("a positive double value of \(someDouble)")    case is Double:        print("some other double value that I don't want to print")    case let someString as String:        print("a string value of \"\(someString)\"")    case let (x,y) as (Double,Double):        print("an (x,y) point at \(x),\(y)")    case let subClassA as SubClassA:        print("a subclass called '\(subClassA.name)',proA. \(subClassA.proA)")    case let subClassB as SubClassB:        print("a subclass called '\(subClassB.name)',proB. \(subClassB.proB)")    default:        print("something else")    }}//zero as an Int//zero as a Double//an integer value of 42//a positive double value of 3.14159//a string value of "hello"//an (x,y) point at 3.0,5.0//a subclass called 'Six',proA. A pro five//a subclass called 'Seven',proB. B pro two

⚠️注意:在一个switch语句的case中使用强制形式的类型检查 *** 作符(as,而不是 as?)来检查和转换到一个明确的类型。在 switch case 语句的内容中这种检查总是安全的。

总结

以上是内存溢出为你收集整理的[swift] is & as、Any & AnyObject全部内容,希望文章能够帮你解决[swift] is & as、Any & AnyObject所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1076729.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存