Mik*_*ers 5 math core-graphics uikit cgfloat swift
我尝试在swift中做一些简单的UIView布局数学,并尝试了以下代码行...
var offset: CGFloat = (bounds.width / 2.0) - ((sortedSymptoms.count * bounds.height) / 2.0)
Run Code Online (Sandbox Code Playgroud)
并从编译器得到以下错误:
cannot invoke '-' with an argument list of type '(($T6), ($T17))'
var offset: CGFloat = (bounds.width / 2.0) - ((sortedSymptoms.count * bounds.height) / 2.0)
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
编译器错误并没有那么有用,但看起来在某种类型的Double,Int和CGFloat之间存在类型冲突.我能够通过在CGFloats的一些明确创作中进行编译来获得编译,但我无法相信这是正确的方法.
var offset: CGFloat = (bounds.width / CGFloat(2.0)) - ((CGFloat(sortedSymptoms.count) * bounds.height) / CGFloat(2.0))
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?
这是Swift中的一个已知问题,开发团队一直致力于改善问题CGFloat.但是在这个时候,是的,这就是你写它的方式.
来自devforums的一些后续(可能会让你开心或悲伤,但至少大致解释当前状态):https://devforums.apple.com/message/1026028#1026028
请注意,这里的主要问题是文字2.0不强制CGFloat,它可以说是应该的.但是count可能总是需要一个演员,意图.你不能总是安全地在数字类型之间进行转换,而Swift故意强迫你在每次进行这些类型的转换时都要考虑.但是应该可以确定文字转换在编译时是否安全,因此应该是可以修复的.