我只是想在Swift中使用ceil
或round
函数,但是收到编译错误:
对成员' ceil'。
的模棱两可的提及
我已经导入了Foundation
和UIKit
模块。我曾尝试使用和不使用import
语句编译它,但没有运气。有谁知道我做错了什么?
我的代码如下;
import UIKit
@IBDesignable class LineGraphView: GraphView {
override func setMaxYAxis() {
self.maxYAxis = ceil(yAxisValue.maxElement())
}
}
答案 0 :(得分:10)
这个问题最初可能看起来很奇怪,但很容易解决。
简单地说,您可能认为调用ceil()
将浮点数舍入到最接近的整数,但实际上它根本不返回整数:如果给它Float
它返回Float
,如果您给它Double
,则会返回Double
。
因此,此代码有效,因为c
最终成为Double
:
let a = 0.5
let c = ceil(a)
...而此代码会导致您的确切问题,因为它会尝试在没有类型转换的情况下强制Double
Int
:
let a = 0.5
let c: Int = ceil(a)
解决方案是将ceil()
的返回值转换为整数,如下所示:
let a = 0.5
let c = Int(ceil(a))
round()
函数也是如此,因此您需要相同的解决方案。
答案 1 :(得分:2)
根据您调用ceil
的位置的范围,您可能需要明确调用Darwin
的{{1}}函数(深入闭包等)。 Darwin是通过ceil
导入的Foundation
导入的。
UIKit
在Linux上,使用let myFloat = 5.9
let myCeil = Darwin.ceil(myFloat) // 6
代替Glibc
进行C级API访问。您必须明确Darwin
并致电import Glibc
,而不是使用Glibc.ceil(myFloat)
。