在雨燕3.0,你可以调用 Mirror(reflecting:x).displayStyle其中x是你感兴趣的值.其结果将是class,struct,enum,dictionary,set...查看文档https://developer.apple.com/reference/swift/mirror.displaystyle
代码示例:
struct SomeStruct {
var name: String
init(name: String) {
self.name = name
}
}
var astruct = SomeStruct(name:"myname")
Mirror(reflecting:astruct).displayStyle == .struct // will be true
Mirror(reflecting:astruct).displayStyle == .class; // will be false
class MyClass {
var name:String
init(name: String) {
self.name=name
}
}
var aclass = MyClass(name:"fsdfd")
Mirror(reflecting:aclass).displayStyle == .struct // will be false
Mirror(reflecting:aclass).displayStyle == .class // will be true
Run Code Online (Sandbox Code Playgroud)
当然,最好在实践中使用switch-case语句来处理.
在Swift 3中,这种方法一直在为我工作:
class TestClass { }
struct TestStruct { }
var mystery:Any
mystery = TestClass()
// Is mystery instance a class type?
print(type(of:mystery) is AnyClass ? "YES" : "NO") // prints: "YES"
mystery = TestStruct()
// Is mystery instance a class type?
print(type(of:mystery) is AnyClass ? "YES" : "NO") // prints: "NO"
Run Code Online (Sandbox Code Playgroud)
请注意,这种方法仅告诉您实例是否为类类型。它不是类的事实并不一定意味着它是一个结构(可以是枚举,闭包,元组等),但是对于大多数目的和上下文,这足以知道您是在处理引用类型还是值类型,通常是需要的。
有is运营商。
if someInstance is SomeType {
// do something
}
Run Code Online (Sandbox Code Playgroud)
并且有as?操作员。
if let someInstance = someInstance as? SomeType {
// now someInstance is SomeType
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |