Swift - Some不透明类型

作者: aven_kang | 来源:发表于2022-03-22 21:57 被阅读0次
    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

    相关文章

      网友评论

        本文标题:Swift - Some不透明类型

        本文链接:https://www.haomeiwen.com/subject/kwterrtx.html