为什么我在Swift中得到它“无法构造,因为它没有可访问的初始化器”

时间:2014-10-27 20:55:55

标签: ios swift

为什么我在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()

3 个答案:

答案 0 :(得分:14)

即使您将框架设置为公共,您仍然需要声明所有要作为“公共”访问的类。你的init方法也是如此。

public init() {
}

为我做了诀窍。

答案 1 :(得分:6)

首先,班级有领先的上限。方法有小写字母。您的意思是MyColorclone()

此时您对编译器感到困惑:

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()