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

RKD*_*RKD 6 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
    }
}
Run Code Online (Sandbox Code Playgroud)

错误在线:

let newColor = myColor()
Run Code Online (Sandbox Code Playgroud)

小智 14

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

public init() {
}
Run Code Online (Sandbox Code Playgroud)

为我做了诀窍.

  • 这为我解决了这个错误消息 - 基类(我已经覆盖了默认的init)需要写为覆盖public init() (4认同)

Rob*_*ier 7

首先,课程有领先的上限.方法有小写字母.你是说MyColorclone().

你现在混淆了编译器:

func Clone<myColor>() -> myColor {
Run Code Online (Sandbox Code Playgroud)

它认为你的意思是这myColor是一个阴影类名的类型变量.因此,当你到达时myColor(),它基本上是相同的T(),没有琐碎的构造函数.

如果你解决了这个问题,你会发现正确的错误是

Type 'MyColor' does not conform to protocol 'Prototype'
Run Code Online (Sandbox Code Playgroud)

这个错误是一个完全不同的问题.有关如何实现复制协议的说明,请参阅Protocol func returns Self.您也可能对后续感兴趣:Swift协议和全局函数的返回类型.