2016-10-01 19 views
13

Vì vậy, tôi có mã này:UIView isKindOfClass trong Swift 3

if view.isKindOfClass(classType){...} 

này làm việc tốt trong Swift 2, nhưng bây giờ mà tôi đang ở Swift 3, tôi nhận được lỗi này:

Giá trị của loại UIView không có thành viên isKindOfClass

Làm cách nào để kiểm tra điều này trong Swift 3?

+3

Trong Swift bạn thường sẽ sử dụng 'hành is', xem http: // stackoverflow. com/questions/24019707/using-iskindofclass-with-swift. –

Trả lời

4

Bạn có thể sử dụng isKind(of:) nhưng nó tốt hơn để sử dụng Swifty hơn isas:

Xem một ví dụ câm:

import Foundation 

class Base {} 
class SuperX: Base {} 
class X: SuperX {} 
class Y {} 

func f(p: Any) { 
    print("p: \(p)") 
    guard let x = p as? Base 
     else { return print(" Unacceptable") } 

    if x is X { 
     print(" X") 
    } 
    if x is SuperX { 
     print(" Super X") 
    } 
    else { 
     print(" Not X") 
    } 
} 

f(p: Base()) 
f(p: SuperX()) 
f(p: X()) 
f(p: "hey") 
f(p: Y()) 
f(p: 7) 

Run mã trong một sân chơi một đầu ra sẽ là:

p: Base 
    Not X 
p: SuperX 
    Super X 
p: X 
    X 
    Super X 
p: hey 
    Unacceptable 
p: Y 
    Unacceptable 
p: 7 
    Unacceptable 
29

Bạn có thể thử với ba tùy chọn này trong Swift 3 :

Lựa chọn 1:

if view is UITabBarItem { 

} 

Phương án 2:

if view.isKind(of:UITabBarItem.self) { 

} 

Lựa chọn 3:

if view.isMember(of:UITabBarItem.self) { 

} 

Sự khác biệt giữa isKind: và isMember: của là:

  • isKind: của trả về CÓ nếu người nhận là một thể hiện của lớp chính xác, HOẶC nếu người nhận là một cá thể của bất kỳ lớp con nào của lớp.
  • isMember: của chỉ lợi nhuận YES nếu người nhận là một thể hiện của lớp chính xác mà bạn đang kiểm tra chống