使用ceil或round时对成员的模糊引用

时间:2015-12-18 14:23:45

标签: ios swift rounding ceil

我只是想在Swift中使用ceilround函数,但是收到编译错误:

  

对成员' ceil'。

的模棱两可的提及

我已经导入了FoundationUIKit模块。我曾尝试使用和不使用import语句编译它,但没有运气。有谁知道我做错了什么? 我的代码如下;

import UIKit

@IBDesignable class LineGraphView: GraphView {
override func setMaxYAxis() {
            self.maxYAxis = ceil(yAxisValue.maxElement())

    }
   }

2 个答案:

答案 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)