我试图让我的一个班级采用FloatingPointProtocol
;我已经实现了here所示的所有必需功能,但Swift仍然给出了以下错误:
Protocol requires a nested type '_BitsType'(Swift.FloatingPointType)
我无法找到与_BitsType
及其FloatingPointType
内嵌套相关的任何文档。为了让我的班级成功采用FloatingPointType
,我需要实施什么?
提前感谢您的帮助!
答案 0 :(得分:3)
_BitsType
是用于表示浮点值的类型
"原始位"。定义是publicly visible in Swift 1.2。
您可以在Swift open source中查找定义,或使用Swift REPL:
$ swift Welcome to Apple Swift version 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81). Type :help for assistance. 1> :type lookup FloatingPointType protocol FloatingPointType : Strideable { typealias _BitsType @warn_unused_result static func _fromBitPattern(bits: Self._BitsType) -> Self @warn_unused_result func _toBitPattern() -> Self._BitsType ...
这两个方法在浮点值和。之间进行转换
一些具有相同位模式的整数类型。例如,它是
UInt32
的{{1}}:
$ swift Welcome to Apple Swift version 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81). Type :help for assistance. 1> :type lookup Float ... extension Float : FloatingPointType { typealias _BitsType = Swift.UInt32 static func _fromBitPattern(bits: Swift.Float._BitsType) -> Swift.Float func _toBitPattern() -> Swift.Float._BitsType ...
对于你自己的浮点类型,你必须决定一个合适的 整数类型,可以表示原始位,并提供 转换功能。对于"短暂浮动"格式可以 例如:
Float
然而, struct MyFloat : FloatingPointType {
let value : UInt16
func _toBitPattern() -> UInt16 {
return value
}
static func _fromBitPattern(bits: UInt16) -> MyFloat {
return MyFloat(value: bits)
}
// ....
}
和转换函数都没有
在Swift 2(或更高版本)中公开显示,而不是正式显示
记录。这可能表明实施自己的
不支持浮点类型,可能无法正常工作。