学術的な目的のために、私は次のような表現を好むとしましょう
someInt.asDouble
ストックというより
Double(someInt)
さまざまな Swift 整数型のすべてがIntegerType
プロトコルに準拠していて、これらの int 型のすべての種類に適合する初期化子があるように思われるため、Double()
次のようなことができると思いました。
extension IntegerType {
var asDouble:Double {
return Double(self)
}
}
これは動作しません。そして、私はその理由を知りたいですか?それを機能させる魔法があるかどうか知りたいですか?たぶんwhere
?それともself
リファレンスと関係がありますか?
これで試したプレイグラウンドのコンソールに表示されるエラーは次のとおりです。
Playground execution failed: /var/folders/2k/6y8rslzn1m95gjpg534j7v8jzr03tz/T/./lldb/41416/playground37.swift:31:10: error: cannot invoke initializer for type 'Double' with an argument list of type '(Self)'
return Double(self)
^
/var/folders/2k/6y8rslzn1m95gjpg534j7v8jzr03tz/T/./lldb/41416/playground37.swift:31:10: note: overloads for 'Double' exist with these partially matching parameter lists: (Double), (UInt8), (Int8), (UInt16), (Int16), (UInt32), (Int32), (UInt64), (Int64), (UInt), (Int), (Float), (Float80), (String), (CGFloat), (NSNumber)
return Double(self)