在使用ceil或round时对成员的引用模棱两可
我只是想在Swift中使用ceil
或round
函数,但得到一个编译时错误:
对成员“ceil”的模糊引用。
我已经导入了Foundation
和UIKit
模块。 我试图编译它有和没有import
陈述,但没有运气。 有没有人有任何想法我做错了什么? 我的代码如下;
import UIKit @IBDesignable class LineGraphView: GraphView { override func setMaxYAxis() { self.maxYAxis = ceil(yAxisValue.maxElement()) } }
这个问题首先会出现,看起来很奇怪,但是很容易解决。
简单地说,你可能会认为调用ceil()
会将浮点数四舍五入到最接近的整数,但实际上它根本不返回一个整数:如果给它一个Float
它将返回一个Float
,如果你给它Double
返回一个Double
。
所以,这个代码工作,因为c
最终是一个Double
:
let a = 0.5 let c = ceil(a)
…而这段代码导致你的确切的问题,因为它试图强制一个Double
进入一个没有types转换的Int
:
let a = 0.5 let c: Int = ceil(a)
解决方法是将ceil()
的返回值转换为整数,如下所示:
let a = 0.5 let c = Int(ceil(a))
round()
函数也是如此,所以你需要相同的解决scheme。
根据你调用ceil
,你可能需要明确地调用Darwin
的ceil
函数(深入封闭等)。 达尔文是通过UIKit
导入的Foundation
导入的。
let myFloat = 5.9 let myCeil = Darwin.ceil(myFloat) // 6
在linux上, Glibc
被用来代替Darwin
的C级API访问。 您将不得不显式import Glibc
并调用Glibc.ceil(myFloat)
而不是使用Darwin
。