swift - 如何在 Swift 中使“CGFloat”符合“BinaryInteger”?
问题描述
我有一个名为test的函数,它接受符合BinaryFloatingPoint
. 在某些情况下,我还必须向Int
函数提供类型 vale,但 Swift 抱怨它需要Int
符合BinaryFloatingPoint
. 所以我试图使Int
符合BinaryFloatingPoint
,但我不知道这是否正确,或者我怎样才能以 Int 符合 BinaryFloatingPoint 的方式完成扩展。
我的目标:我希望我的函数能够处理数字,但使用数字作为协议是不够的!它不是那样工作的,它需要BinaryFloatingPoint才能工作!但另一方面,它无法处理Int。
func test<T: Numeric>(value: ClosedRange<T>) {
let someWork: CGFloat = CGFloat(value.upperBound - value.lowerBound)
}
用例:
let value: ClosedRange<Int> = -100...100
test(value: value)
x代码错误:
Global function 'test(value:)' requires that 'Int' conform to 'BinaryFloatingPoint'
解决方案
答案就在这里,在不同的函数中使用BinaryFloatingPoint和BinaryInteger:
func test<T: BinaryFloatingPoint>(value: ClosedRange<T>) {
let someWork: CGFloat = CGFloat(value.upperBound - value.lowerBound)
print(someWork)
}
func test<T: BinaryInteger>(value: ClosedRange<T>) {
let someWork: CGFloat = CGFloat(value.upperBound - value.lowerBound)
print(someWork)
}
推荐阅读
- arrays - 输入 json 需要 Jolt 转换
- c# - C# 正则表达式电话号码检查仅接受 xxx-xxx-xxxx
- nfa - 是否允许没有空转换的 NFA?
- android - 如何在 Appcenter 构建后脚本中执行所有 Android JUnit 测试
- python - Python 在每个异常上显示自定义错误消息/回溯
- openid-connect - openId Connect 为同一应用的不同选项卡返回的 access_token 和 id_token
- javascript - 如何使用数据重定向到 ajax 中的另一个页面?
- android - 如何在自定义位置保存相机照片?
- java - 更正应用程序的类路径,使其包含一个兼容的 javax.persistence.JoinColumn 版本
- chromium - Chromium 不播放视频