2015-04-29 35 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

相关问题