Ali*_*li 3 casting type-conversion downcast upcasting swift
class Media {
var name :String = ""
init(name:String) {
self.name = name
}
}
class Song:Media {}
class Movie:Media{}
let s1 = Song(name :"Fireproof")
var m1 :Media = s1 //upcasting
//var s2 :Song = m1
var s2:Song = m1 as Song //down casting
// var x1 :Movie = m1 as Movie //
Run Code Online (Sandbox Code Playgroud)
在行上var m1: Media = s1你可以设置m1等于s1因为m1's类型是超类s1?
在线var s2: Song = m1 as Song,它被认为是"向下铸造",是因为m1: Media并且你"铸造"它"作为"一种Song类型,以匹配相同类型的s2?(如果这是真的,那么为什么我们设置m1= s1更早,当s1有一个不同的类型而不是m1?)
所有这些铸造和铸造的重点是什么?我已经阅读了苹果文档,并设法让自己更加困惑:'(
- 在行上
var m1: Media = s1你可以设置m1等于s1因为m1's类型是超类s1?
是.s1是一个Song,这意味着它也是一个定义Media.因此可以将其分配给类型Song或变量Media.
- 在线
var s2: Song = m1 as Song,它被认为是"向下铸造",是因为m1: Media并且你"铸造"它"作为"一种Song类型,以匹配相同类型的s2?(如果这是真的,那么为什么我们设置m1=s1更早,当s1有一个不同的类型而不是m1?)
没有理由在实际代码中进行上传,然后立即进行预测.这只是示例代码,向您展示可以执行的操作.
顺便说一句,简单的"as"语法是旧的Swift - 你现在需要使用它,as!如果你确定它会在100%的时间内工作,或者as?如果你不确定的话.(谷歌"迅速可选的浇铸"以获得更多关于这一点.)普通老"为"现在仅适用于蒙上编译器知道总会的工作,像String到NSString.
- 所有这些铸造和铸造的重点是什么?我已经阅读了苹果文档,并设法让自己更加困惑:'(
这段代码中没有证明真正的观点.它通常用于与具有公共基类的异类数组进行交互.例如,如果您有一组不同的视图,您可能希望将它们放在一个数组中并对所有视图执行某些操作:
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
let button = UIButton()
let slider = UISlider()
let views = [label, button, slider] // views is a [UIView]
for view in views {
// view is known to be a UIView, even though it is also really a label, button, etc.
view.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(view)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你不确定你需要知道这一点,现在就不用担心太多了.当你遇到一个问题时,回到这个问题,你有一堆相似类型的东西但不是完全相同的类型.
| 归档时间: |
|
| 查看次数: |
3373 次 |
| 最近记录: |