2
的UIImageView * ICONVIEW = [cell.contentView viewWithTag:TestTag];
我記得如果我不明確地轉換類型,那麼以前會有警告,但現在Xcode沒有顯示,而我的Xcode版本是7.1.1,是我修改了一個新功能一些配置?誰能告訴我爲什麼?
的UIImageView * ICONVIEW = [cell.contentView viewWithTag:TestTag];
我記得如果我不明確地轉換類型,那麼以前會有警告,但現在Xcode沒有顯示,而我的Xcode版本是7.1.1,是我修改了一個新功能一些配置?誰能告訴我爲什麼?
Objective-C中有一個新的(Xcode 7)關鍵字,__kindof
,允許您更好地表達方法的返回值。取而代之的viewWithTag:
返回UIView *
,它可以返回__kindof UIView *
告訴編譯器是這樣的:
接受的返回類型的任何隱式垂頭喪氣如果類型是
UIView
或UIView
一個子類。
由於UIImageView
是UIView
的子類,因此不需要顯式轉換。在另一方面,下面的代碼行將會導致一個編譯器錯誤,因爲NSDate
不是UIView
一個子類:
NSDate *date = [cell.contentView viewWithTag:TestTag];
所以IDE的嵌入式鑄件給我嗎?如果viewWithTag返回一個UILabel它也沒有警告,它也可能得到一個錯誤的類型,但我認爲最重要的部分不是是否有明確的類型轉換,你認爲哪種類型更重要,而且我可以使用__kindof編寫更少的代碼,謝謝您的回答! – cajsaiko
編譯器接受沒有類型轉換的代碼。這實際上是Objective-C與Swift-Objective-C採取寬鬆(更不安全)方法的關係,而Swift更嚴格(更安全),並且總是需要明確的轉換。 –