我想确保在两种情况下我都能获得正确的语法,这个类是超类还是派生类?以下代码有任何问题吗?
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}}
答案 0 :(得分:0)
这是Swift方式(既安全又美观):
if (response as? NSHTTPURLResponse)?.statusCode == 200 {
它使用条件转换和可选链接来测试该类为NSHTTPURLResponse
且statusCode
为200
。请注意,!
之后您不需要NSHTTPURLResponse
。
如果response
是另一个类,则(response as? NSHTTPURLResponse)
将返回nil
,因此整个可选链将返回nil
,并且从nil != 200
开始,测试将失败