我有一个由AnyObject组成的数组。我想遍历它,找到所有数组实例的元素。
我怎么能检查如果一个对象是一个给定的类型在Swift?
我有一个由AnyObject组成的数组。我想遍历它,找到所有数组实例的元素。
我怎么能检查如果一个对象是一个给定的类型在Swift?
当前回答
是吗?不会总是给出预期的结果,因为as并不测试数据类型是否为特定类型,而只测试数据类型是否可以转换为或表示为特定类型。
以下面的代码为例:
func handleError ( error: Error ) {
if let nsError = error as? NSError {
每个符合Error协议的数据类型都可以转换为NSError对象,所以这总是会成功。但这并不意味着error实际上是一个NSError对象或它的子类。
正确的类型检查应该是:
func handleError ( error: Error ) {
if type(of: error) == NSError.self {
但是,这只检查确切的类型。如果你还想包含NSError的子类,你应该使用:
func handleError ( error: Error ) {
if error is NSError.Type {
其他回答
在Swift 2.2 - 5你现在可以做:
if object is String
{
}
然后过滤你的数组:
let filteredArray = originalArray.filter({ $0 is Array })
如果你有多个类型需要检查:
switch object
{
case is String:
...
case is OtherClass:
...
default:
...
}
如果你有这样的响应:
{
"registeration_method": "email",
"is_stucked": true,
"individual": {
"id": 24099,
"first_name": "ahmad",
"last_name": "zozoz",
"email": null,
"mobile_number": null,
"confirmed": false,
"avatar": "http://abc-abc-xyz.amazonaws.com/images/placeholder-profile.png",
"doctor_request_status": 0
},
"max_number_of_confirmation_trials": 4,
"max_number_of_invalid_confirmation_trials": 12
}
你想检查值is_stuck将被读取为AnyObject,你所要做的就是这个
if let isStucked = response["is_stucked"] as? Bool{
if isStucked{
print("is Stucked")
}
else{
print("Not Stucked")
}
}
斯威夫特3:
class Shape {}
class Circle : Shape {}
class Rectangle : Shape {}
if aShape.isKind(of: Circle.self) {
}
let originalArray : [Any?] = ["Hello", "World", 111, 2, nil, 3.34]
let strings = originalArray.compactMap({ $0 as? String })
print(strings)
//printed: ["Hello", "World"]
Swift 5.2 & Xcode版本:11.3.1(11C504)
以下是我检查数据类型的解决方案:
if let typeCheck = myResult as? [String : Any] {
print("It's Dictionary.")
} else {
print("It's not Dictionary.")
}
我希望它能帮助你。