Tôi chạy vào này sử dụng mảnh vô tội-tìm mã này:
func foo(line: CTLine) {
let ascent: CGFloat
let descent: CGFloat
let leading: CGFloat
let fWidth = Float(CTLineGetTypographicBounds(line, &ascent, &descent, &leading))
let height = ceilf(ascent + descent)
// ~~~~~~^~~~~~~~
}
Và tìm thấy giải pháp bằng cách mở rộng lỗi trong Bộ điều hướng phát hành:
Nhìn vào nó, tôi nghĩ Swift tìm thấy hàm +(lhs: Float, rhs: Float) -> Float
đầu tiên dựa trên kiểu trả về của nó (ceilf
mất một Float
). Rõ ràng, điều này mất Float
s, không phải CGFloat
s, làm sáng tỏ một số ý nghĩa của thông báo lỗi. Vì vậy, để ép buộc sử dụng toán tử phù hợp, bạn phải sử dụng hàm bao bọc phải mất hoặc a Double
hoặc là Float
(hoặc chỉ là CGFloat
). Vì vậy, tôi đã cố gắng này và các lỗi đã được giải quyết:
// ...
let height = ceilf(Float(ascent + descent))
// ...
cách tiếp cận khác sẽ được sử dụng một chức năng mà phải mất một Double
hoặc CGFloat
:
// ...
let height = ceil(ascent + descent)
// ...
Vì vậy, vấn đề là các ưu tiên biên dịch trả về các kiểu trên các kiểu tham số. Vui mừng khi thấy điều này vẫn xảy ra trong Swift 3; P
Nguồn
2016-08-23 22:12:15
Chắc chắn bạn có thể. - Một ví dụ mã (nhỏ, khép kín) thể hiện vấn đề của bạn sẽ vô cùng hữu ích ... –
Tôi cũng gặp lỗi tương tự, lý do có thể là gì? – sasquatch