22

次のように、ネストされた型をプロトコル内で宣言することができます。

protocol Nested {

    class NameOfClass {
        var property: String { get set }
    }
}

Xcode には、「ここでは入力できません」と表示されます。

タイプ 'NameOfClass' は、プロトコル 'Nested' でネストできません

ネストされた型を持つ必要があるプロトコルを作成したいと考えています。これは不可能ですか、それとも別の方法でこれを行うことができますか?

4

3 に答える 3

28

プロトコルはネストされた型を要求できませんが、別のプロトコルに準拠する関連型を要求できます。実装では、ネストされた型または型エイリアスのいずれかを使用して、この要件を満たすことができます。

protocol Inner {
    var property: String { get set }
}
protocol Outer {
    associatedtype Nested: Inner
}

class MyClass: Outer {
    struct Nested: Inner {
        var property: String = ""
    }
}

struct NotNested: Inner {
    var property: String = ""
}
class MyOtherClass: Outer {
    typealias Nested = NotNested
}
于 2015-08-06T02:12:49.300 に答える
0

これがあなたのコードですが、うまくいく方法です:

protocol Nested {
    associatedtype NameOfClass: HasStringProperty

}
protocol HasStringProperty {
    var property: String { get set }
}

そして、あなたはそれをこのように使うことができます

class Test: Nested {
    class NameOfClass: HasStringProperty {
        var property: String = "Something"
    }
}

お役に立てれば!

于 2017-05-23T17:02:12.723 に答える