[swift] is & as、Any & AnyObject
发布时间:2020-12-14 07:01:58 所属栏目:百科 来源:网络整理
导读:is as 是用于swift 的类型检测 用简单的话来说就是: is 是判断某个实例是否是某种类型的子类型 as 用于类型转换, 将父类类型的实例转换成子类类型, as? 试图向下转换,如果不能成功则返回nil as!试图向下转换,并强制解包 class FatherClass { var name:
is & as是用于swift 的类型检测 用简单的话来说就是:
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 SubClassA
for 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两种不确定类型
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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |