向下转换和可选:这个代码是惯用的吗?

时间:2015-06-14 02:10:26

标签: swift

我想确保在两种情况下我都能获得正确的语法,这个类是超类还是派生类?以下代码有任何问题吗?

if ([response isKindOfClass:[NSHTTPURLResponse class]] && [(NSHTTPURLResponse *)response statusCode] != 200) {

使用此语法的代码示例(dataTaskURL):

ObjC:

if response.isKindOfClass(NSHTTPURLResponse.self) && (response as! NSHTTPURLResponse).statusCode != 200 {

Swift ObjC-like:

if (response as? NSHTTPURLResponse!)?.statusCode == 200 {

更好的斯威夫特?

{{1}}

1 个答案:

答案 0 :(得分:0)

这是Swift方式(既安全又美观):

if (response as? NSHTTPURLResponse)?.statusCode == 200 {

它使用条件转换可选链接来测试该类为NSHTTPURLResponsestatusCode200 。请注意,!之后您不需要NSHTTPURLResponse

如果response是另一个类,则(response as? NSHTTPURLResponse)将返回nil,因此整个可选链将返回nil,并且从nil != 200开始,测试将失败