使用 ceil 或 round 时对成员的引用不明确
Ambiguous reference to member when using ceil or round
我只是想在 Swift 中使用 ceil
或 round
函数,但遇到编译时错误:
Ambiguous reference to member 'ceil'.
我已经导入了 Foundation
和 UIKit
模块。我曾尝试使用和不使用 import
语句来编译它,但没有成功。有谁知道我做错了什么?
我的代码如下;
import UIKit
@IBDesignable class LineGraphView: GraphView {
override func setMaxYAxis() {
self.maxYAxis = ceil(yAxisValue.maxElement())
}
}
根据您调用 ceil
的范围,您可能需要显式调用 Darwin
的 ceil
函数(在闭包深处等)。 Darwin 通过 Foundation
导入,通过 UIKit
.
导入
let myFloat = 5.9
let myCeil = Darwin.ceil(myFloat) // 6
在 linux 上,Glibc
代替 Darwin
用于 C 级 API 访问。您必须显式 import Glibc
并调用 Glibc.ceil(myFloat)
而不是使用 Darwin
.
这个问题起初看起来很奇怪,但很容易解决。
简而言之,您可能认为调用 ceil()
会将浮点数四舍五入为最接近的整数,但实际上它 return 根本不是整数:如果您给它一个Float
它 return 是 Float
,如果你给它一个 Double
它 return 就是 Double
.
因此,此代码有效,因为 c
最终成为 Double
:
let a = 0.5
let c = ceil(a)
…而此代码会导致您的确切问题,因为它试图在没有类型转换的情况下将 Double
强制转换为 Int
:
let a = 0.5
let c: Int = ceil(a)
解决方法是将ceil()
的return值转换为整数,像这样:
let a = 0.5
let c = Int(ceil(a))
round()
函数也是如此,因此您需要相同的解决方案。
我只是想在 Swift 中使用 ceil
或 round
函数,但遇到编译时错误:
Ambiguous reference to member 'ceil'.
我已经导入了 Foundation
和 UIKit
模块。我曾尝试使用和不使用 import
语句来编译它,但没有成功。有谁知道我做错了什么?
我的代码如下;
import UIKit
@IBDesignable class LineGraphView: GraphView {
override func setMaxYAxis() {
self.maxYAxis = ceil(yAxisValue.maxElement())
}
}
根据您调用 ceil
的范围,您可能需要显式调用 Darwin
的 ceil
函数(在闭包深处等)。 Darwin 通过 Foundation
导入,通过 UIKit
.
let myFloat = 5.9
let myCeil = Darwin.ceil(myFloat) // 6
在 linux 上,Glibc
代替 Darwin
用于 C 级 API 访问。您必须显式 import Glibc
并调用 Glibc.ceil(myFloat)
而不是使用 Darwin
.
这个问题起初看起来很奇怪,但很容易解决。
简而言之,您可能认为调用 ceil()
会将浮点数四舍五入为最接近的整数,但实际上它 return 根本不是整数:如果您给它一个Float
它 return 是 Float
,如果你给它一个 Double
它 return 就是 Double
.
因此,此代码有效,因为 c
最终成为 Double
:
let a = 0.5
let c = ceil(a)
…而此代码会导致您的确切问题,因为它试图在没有类型转换的情况下将 Double
强制转换为 Int
:
let a = 0.5
let c: Int = ceil(a)
解决方法是将ceil()
的return值转换为整数,像这样:
let a = 0.5
let c = Int(ceil(a))
round()
函数也是如此,因此您需要相同的解决方案。