为什么我在Swift中得到这个"无法构造,因为它没有可访问的初始化器":
import Foundation
protocol Prototype {
func Clone<T>() -> T
}
class myColor: Prototype {
var red: Int?
var green: Int?
var blue: Int?
init () {}
func Clone<myColor>() -> myColor {
let newColor = myColor()
newColor.red = self.red
newColor.green = self.green
newColor.blue = self.blue
return newColor
}
}
错误在线:
let newColor = myColor()
答案 0 :(得分:14)
即使您将框架设置为公共,您仍然需要声明所有要作为“公共”访问的类。你的init方法也是如此。
public init() {
}
为我做了诀窍。
答案 1 :(得分:6)
首先,班级有领先的上限。方法有小写字母。您的意思是MyColor
和clone()
。
此时您对编译器感到困惑:
func Clone<myColor>() -> myColor {
它认为你的意思是myColor
是一个隐藏类名的类型变量。所以,当你到达myColor()
时,它与T()
基本相同,它没有简单的构造函数。
如果你解决了这个问题,你会发现正确的错误是
Type 'MyColor' does not conform to protocol 'Prototype'
错误是一个完全不同的问题。有关如何实施复制协议的说明,请参阅Protocol func returning Self。您也可能对后续内容感兴趣:Swift protocol and return types on global functions。
答案 2 :(得分:0)
似乎泛型生成类的扩展,需要使用。
override init() {...
请注意,Swift中的任何类都必须具有初始化程序。 在你的情况下,通用,类必须有 init()