1

含まれているオブジェクトが特定のプロトコルに準拠している場合にのみメソッドを追加するために、Array 構造体の拡張を作成しようとしていますが、クラスから拡張内のメソッドにアクセスしようとすると、奇妙な動作が発生します。

ここに遊び場の私のコードがあります

protocol SomeInt {
    var theInt: Int {get set}
}

extension Array where Element: SomeInt {
    func indexOf(object:SomeInt) -> Index? {
        return indexOf({ (obj) -> Bool in
            return obj.theInt == object.theInt
        })
    }
}

class PRR: SomeInt {
    var theInt: Int = 0
    init(withInt value: Int){
        theInt = value
    }
}

class container {
    var items: [SomeInt]!
}

let obj1 = PRR(withInt: 1)
let obj2 = PRR(withInt: 2)

let arr = [obj1, obj2]
arr.indexOf(obj1) //this succeds

let cont = container()
cont.items = [obj1, obj2]
cont.items.indexOf(obj1) //this doesn't

何が悪いのか何か考えはありますか??

4

1 に答える 1