Скажем, для академических целей я бы предпочел выражение вроде
someInt.asDouble
а не акции
Double(someInt)
Поскольку все различные целые типы Swift соответствуют протоколу IntegerType
И поскольку, похоже, существует инициализатор Double()
, который подходит для всех типов этих типов int, я подумал, что мог бы что-то вроде:
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)
Int
— это то, что содержит значение. Ни один из протоколов, которым он соответствует. - person R Menke   schedule 11.11.2015self
? - person Travis Griggs   schedule 11.11.2015