Swift学习笔记Swift好文收藏

Swift - Some不透明类型

2022-03-22  本文已影响0人  aven_kang
protocol Runnable {
    
    associatedtype Speed;
    var speed : Speed { get }
}

class Person :Runnable {
    
    var speed: Int { 0 }

}

class Car : Runnable {
    
    var speed: Double { 0.0 }
    
}

func get(_ type:Int) -> some Runnable {
    
    return Car()
    
}

在get这个方法中,多了一个some,其实就是要求我们只能返回一种类型,如果把some去掉,会报错,为什么呢,我们看看Runnable这个协议,有一个speed这个属性,而继承这个属性的,有Person和Car对象,这两个对象针对speed的初始化,都是不同的类型,那么在返回的时候,就无法确定要返回的是Person对象,还是Car对象,编译器无法识别
其实,加上some这个关键字,不透明类型,意在告诉开发者,这个返回值类型是不公开的,可能是Person,也可能是Car对象,因为那两个对象都继承了Runnable这个协议,但是又只能返回一种类型,编译器才能确定,相当于内容被包装起来了,编译器知道你要返回的是哪个对象了,但是外部的人并不知道。


截屏2022-03-02 下午3.53.47.png

从上图中,我们可以看到r1对象调用speed的时候,并没有告诉我们这个对象就是Person对象,但实际上是Person对象,只是外界并不知道,有点隐匿了的感觉

some除了用在返回值类型上,一般还可以用在属性类型上
截屏2022-03-02 下午3.59.43.png
上一篇下一篇

猜你喜欢

热点阅读