现在我正在处理一个具有很多可选属性的类。对于这些可选属性中的一些,我希望能够采用不同的类型,并基本上将它们转换为我想要存储的类型,以方便用户。例如,用户可以提供Date
,String
或Int
来指示某个日期。这是我想要做的一个例子。 (忽略,我做一个潜在的不安全包装的事实。)可选参数可以具有不同类型时模糊Swift初始化器
class SOExample {
let value: Int
let time: Double?
init(value: Int, time: Double? = nil) {
self.value = value
self.time = time
}
convenience init(value: Int, time: Int? = nil) {
if time != nil {
self.init(value: value, time: Double(time!))
} else {
self.init(value: value, time: nil)
}
}
}
问题是当我尝试不使用任何自选初始化 - 它不知道有什么用初始化。例如,SOExample(value: 7)
给这个早在单元测试:
error: ambiguous use of 'init(value:time:)'
let soExample = SOExample(value: 7)
^
<unknown>:0: note: found this candidate
<unknown>:0: note: found this candidate
<unknown>:0: error: build had 1 command failures
如何将我能够做我想要做什么?我是否完全错误的方式?我应该使用除多个初始化程序之外的其他功能来执行此操作吗?
你可以从一个inits中删除不需要的参数吗? –
你能举一个更有意义的例子吗?你的代码崩溃是因为你打开了一个'nil'值,而'fooDouble:Int'显然是无意义的。 – luk2302
@EugeneZhenyaGordin确实做到了!现在我对这个问题感到无聊。随意张贴,作为答案。 – TheSoundDefense