美文网首页
Protocol里Self的应用.

Protocol里Self的应用.

作者: 轻云绿原 | 来源:发表于2017-06-26 11:12 被阅读64次
    protocol Pro{
        //指向一个父亲
        var parent:Self? { get }
        //指向多个孩子
        var chidren:Array<Self>? { get }
    }
    

    当在protocol里使用Self做为类型时,表示指向自身的类型.这个类一定在加final修饰,表示这个类已经是没有子类了.

    final class Test:Pro {
        var parent: Test?
        var chidren: Array<Test>?
    }
    

    如果不加会出现以下错误提示:

    protocol 'Pro' requirement 'chidren' cannot be satisfied by a non-final class ('Test') because it uses 'Self' in a non-parameter, non-result type position

    但是,Self做为返回类型时,没有这样的限制

    protocol Pro{
        // 返回自己
        func returnSelf() -> Self?
    }
    
    class Test:Pro {
        func returnSelf() -> Self? {
            return self //只能返回自身`self`,不能返回其它的相同类型.
        }
    }
    

    只能返回自身self,不能返回其它的相同类型.

    //错误,示例
    class Test:Pro {
        func returnSelf() -> Self? {
            return Test()  
        }
    }
    

    会出现以下错误提示

    error: cannot convert return expression of type 'Test' to return type 'Self?'

    相关文章

      网友评论

          本文标题:Protocol里Self的应用.

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