为什么我在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)
为我做了诀窍.
首先,课程有领先的上限.方法有小写字母.你是说MyColor和clone().
你现在混淆了编译器:
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协议和全局函数的返回类型.
| 归档时间: |
|
| 查看次数: |
31295 次 |
| 最近记录: |