今、私は多くのオプションのプロパティを持つクラスを扱っています。これらのオプションのプロパティのいくつかについては、さまざまな型を取り入れて、基本的にはフードの下にそれらを型として保存したいと思っています。例えば、ユーザは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)
}
}
}
私は任意のoptionalsせずに初期化しようとすると、問題が来る - それは使用するためにどのような初期化子を知りません。例えば、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
は、どのように私は私がやろうとしている何をすることができるだろうか?私はこれについて完全に間違った方法をとっていますか?これを行うには、複数のイニシャライザ以外のものを使用する必要がありますか?
あなたは単なる入力から不要なパラメータを削除できますか? –
もっと理にかなった例を表示できますか?あなたは 'nil'値をアンラップし、' fooDouble:Int'は明らかではないのでコードがクラッシュします。 – luk2302
@EugeneZhenyaGordinがトリックをやった!今私はこれを求めて愚かな気分になります。それを回答として投稿してください。 – TheSoundDefense