2015-11-24 42 views
2

例如,爲什麼使用viewWithTag投射時沒有警告?

的UIImageView * ICONVIEW = [cell.contentView viewWithTag:TestTag];

我記得如果我不明確地轉換類型,那麼以前會有警告,但現在Xcode沒有顯示,而我的Xcode版本是7.1.1,是我修改了一個新功能一些配置?誰能告訴我爲什麼?

回答

2

Objective-C中有一個新的(Xcode 7)關鍵字,__kindof,允許您更好地表達方法的返回值。取而代之的viewWithTag:返回UIView *,它可以返回__kindof UIView *告訴編譯器是這樣的:

接受的返回類型的任何隱式垂頭喪氣如果類型是UIViewUIView一個子類。

由於UIImageViewUIView的子類,因此不需要顯式轉換。在另一方面,下面的代碼行將會導致一個編譯器錯誤,因爲NSDate不是UIView一個子類:

NSDate *date = [cell.contentView viewWithTag:TestTag]; 
+0

所以IDE的嵌入式鑄件給我嗎?如果viewWithTag返回一個UILabel它也沒有警告,它也可能得到一個錯誤的類型,但我認爲最重要的部分不是是否有明確的類型轉換,你認爲哪種類型更重要,而且我可以使用__kindof編寫更少的代碼,謝謝您的回答! – cajsaiko

+0

編譯器接受沒有類型轉換的代碼。這實際上是Objective-C與Swift-Objective-C採取寬鬆(更不安全)方法的關係,而Swift更嚴格(更安全),並且總是需要明確的轉換。 –

相關問題