由於Any
字面意思ANY數據類型。沒有什麼需要Any
類型的值必須能夠成爲可以添加或從視圖中刪除的視圖。 Int
可以是Any
,String
可以是Any
。你會期待這樣的事情嗎?
let any: Any = 123
any.removeFromSuperView() // What should this call do??? o.0'
因爲您只知道值的成員的類型,您知道該值。這就是一種類型:它是通過您可以對它們執行的操作對值進行分類。
在像雨燕一種類型安全的語言,你不能執行,除非你確認值的任何操作你這樣做,以支持該操作。當你知道確切類型的值時,你就會獲得確定性,因爲那樣你就可以檢查該類型是否支持你正在嘗試使用的操作或成員。
沒有理由在這裏首先使用Any
。以下是如何漂亮,特定類型的寫:
var imageViews = [UIImageView]()
func viewDidLoad() {
for v in 0..<4 {
let imageView = UIImageView(frame: CGRect(x: 0 , y: 192, width: 98, height: 94))
imageView.image = UIImage(named: something)
imageViews.append(imageView)
}
imageView[0].removeFromSuperview()
}
如果imageViews
在viewDidLoad
的append
調用之前沒有值,這個代碼可以更好的寫法如下:
let imageViews = [UIImageView]()
func viewDidLoad() {
imageViews = (0..<4).map { v in
let imageView = UIImageView(frame: CGRect(x: 0 , y: 192, width: 98, height: 94))
imageView.image = UIImage(named: something)
return imageView
}
imageView[0].removeFromSuperview()
}
因爲'Any'字面意思'any'。什麼是阻止你把'Int'值0放在那個數組中,然後試着對它調用'removeFromSuperView'?該計劃應該如何決定該怎麼做? – Alexander
'myImageView'從哪裏來? – Alexander
myImageView以編程方式創建;類似的東西,以讓myImageView =的UIImageView(幀:的CGRect(X:CGFloat的()中,Y:CGFloat的(192),寬:CGFloat的(98),高度:CGFloat的(94))) – Amrit