Swift判斷對象屬於什么類型


1.Objective-C 中常用的判斷一個對象是屬於哪個類的方法有下面兩類:

[obj1 isKindOfClass:[ClassA class]];
[obj2 isMemberOfClass:[ClassB class]];

結論:

-isKindOfClass: 判斷obj1是否是ClassA或者其子類的實例對象;
-isMemberOfClass: 對obj2做出判斷,當且僅當obj2的類型為ClassB時返回為真

在 Swift 中如果寫的是NSObject的子類的話

class ClassA: NSObject { }
class ClassB: ClassA { }

let obj1: NSObject = ClassB()
let obj2: NSObject = ClassB()

obj1.isKindOfClass(ClassA.self)    // true
obj2.isMemberOfClass(ClassA.self)  // false

2.在 Swift 中提供了一個更簡潔的寫法:對於一個不確定的類型,我們可以使用is來進行判斷。is在功能上相當於原來的isKindOfClass,可以檢查一個對象是否屬於某類型或其子類型。is和原來的區別主要在於它不僅可以用於class類型上,也可以對 Swift 的其他像是structenum類型進行判斷。如下:

class ClassA { }
class ClassB: ClassA { }

let obj: AnyObject = ClassB()

if (obj is ClassA) {
    print("obj 屬於 ClassA")
}

if (obj is ClassB) {
    print("obj 屬於 ClassB")
}

另外,編譯器將對這種檢查進行必要性的判斷:如果編譯器能夠唯一確定類型,那么is的判斷就沒有必要,編譯器將會拋出一個警告,來提示你並沒有轉換的必要。如下:

let string = "String"
if string is String {
    // 
}

 

by:liming

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM