簡體   English   中英

Swift協議一致性

[英]Swift Protocol Conformance

這是我正在處理的一組價值關系的示例。

protocol Configurable {
    func configure(data: Any?) -> Void
}

class RelatedObject {
    var x: String = ""
    var y: String = ""
}

class Example {
    var a: String = ""
    var b: String = ""
    var c: String = ""
}

extension Example: Configurable {
    func configure(data: Any?) //I want the parameter to be of type RelatedObject?, not Any?
    {
        if let d = data as? RelatedObject { //I don't want to have to do this every time i implement Configurable on an object.
            //do stuff
            a = d.x
            b = d.y
            c = d.x + d.y
        }
    }
}

我的實現可配置協議的類是否可以限制它們在函數簽名中接受的對象的特定類型?

我覺得Swift可以/應該/應該有一種方法來避免出現這樣的情況:我必須檢查類類型以了解傳遞給想要配置的對象的內容。

您正在協議定義中尋找類型別名。

protocol Configurable {
    typealias InputData
    func configure(data: InputData) -> Void
}

在實現協議的任何方法中,都將typealias設置為所需的類型。

class RelatedObject {
    var x: String = ""
    var y: String = ""
}

class Example {
    var a: String = ""
    var b: String = ""
    var c: String = ""
}

extension Example: Configurable {
    typealias InputData = RelatedObject 

    func configure(data: InputData)  {
        a = data.x
        b = data.y
        c = data.x + data.y
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM