Swift转换问题

时间:2016-01-01 12:49:30

标签: ios swift swift2

将我的一些代码从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类型转换的正确性

2 个答案:

答案 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