2015-04-29 74 views
1

我收到以下錯誤......如何在Swift中構造沒有協議的泛型?

'T' cannot be constructed because it has no accessible initializers

編譯時...

class Sub<T : Equitable> { 
    func def(v : T) -> Bool{ 
     var d = T()   // <- Error 
     return d == v 
    } 
} 
var s = Sub<Int>() 
println(s.def(0), s.def(1)) // I'm expecting "true, false" 

我明白,爲了讓泛型類型進行初始化,它需要符合到一個包含init()構造函數的協議。如...

protocol A : Equitable { 
    init() 
} 

class Sub<T : A> { 

但我會得到得到錯誤

Type 'Int' does not conform to protocol 'A'

在該行

var s = Sub<Int>()

那麼我將如何去製作一個價值類型如Int或Bool是否符合可以初始化的協議?

回答

1

您需要延長詮釋像這樣爲它採用協議答:

class Sub<T : A> { 
    func def(v : T) -> Bool{ 
     var d = T() 
     return d == v 
    } 
} 

protocol A : Equatable { 
    init() 
} 

extension Int: A { 

} 

var s = Sub<Int>() 
s.def(0) // true 
s.def(1)) // false 
+0

所以,如果我想使用這個類的詮釋,UINT,布爾等,我會添加一個擴展每個類型? – tidwall

+0

是的,這是正確的,採用新的協議是一個擴展 – sketchyTech

相關問題