将我的一些代码从Objective-C转换为Swift。陷入了类型转换语句的组合:
if (![[array objectAtIndex:0] isKindOfClass:[BaseView class]]) {
//Throw an exception
}
由于分支应该抛出异常,我使用的是guard语句而不是if-else。到目前为止,我已经完成了以下工作:
guard NSArray(array: array).objectAtIndex(0) else {
//throw SomeException
}
请指导剩下的部分,如何使用isKindOfClass
,我也怀疑NSArray
类型转换的正确性
答案 0 :(得分:7)
更正确的方法是使用is
,因为它意味着要取代isKindOfClass
。
guard array.first is BaseView else {
// Throw exception if its not a BaseView subclass
}
答案 1 :(得分:3)
以下适合您的情况:
guard let arr0 = array.first as? BaseView else {
return // or throw exception
}
您尝试将array.first
中的值转换为BaseView
,如果转换失败,您将进入else
块,如果您希望。另外(感谢@Adam)如果数组为空将返回/ throw。如果必须检查第三个元素是否属于某种类型,则应检查该数组实际上是否包含至少3个值。
考虑以下示例:
func t(arr : [AnyObject]) {
guard let arr0 = arr.first as? String else {
return
}
print(arr0)
}
t(["asd", 123]) // prints something
t([123, "asd"]) // returns without printing anything
t([]) // returns without printing anything