2016-10-27 13 views
18

Tôi có dòng này:Toán tử mô đun (%) trong 3 nhanh?

randomIndex = Int(drand48() % Double(alphabetColors.count)) 

Và Xcode 8 (Swift 3) nói với tôi:

'%' is unavailable: Use truncatingRemainder instead 

Có không có nhà điều hành nữa? Tôi nên chuyển đổi mã của mình như thế nào?

+0

Toán tử% là một hoạt động còn lại không phải là toán tử modulo trong Swift. Đây là một số thảo luận về nó: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160523/018679.html – wazy

Trả lời

21

Bạn chỉ có thể làm theo thông điệp chẩn đoán:

let randomIndex = Int(drand48().truncatingRemainder(dividingBy: Double(alphabetColors.count))) 

Hoặc sử dụng arc4random_uniform(_:) sẽ là một lựa chọn tốt hơn.

let randomIndex = Int(arc4random_uniform(UInt32(alphabetColors.count))) 
18

enter image description here

này có vẻ là có sẵn đối với tôi, hiện trên Swift 3.1, vì vậy có thể nó đã được bổ sung trở lại.

tôi đoán là nó ở đâu đó trong Foundation và cần một rõ ràng import Foundation

Cập nhật

này chỉ dành cho các loại Int. Có vẻ như cho đôi, cắt ngắn phần còn lại là bắt buộc.

+0

Thật lạ lùng, tôi không thể tìm thấy bất kỳ điều gì về nó trên https://apple.github.io/swift-evolution/ cho Swift 3.1. Không có thư viện bên thứ ba nào bên cạnh bạn có thể gây ra hành vi này không? – Kalzem

+2

Ồ bạn đúng, tôi đã tìm thấy một đoạn về nó trên tài liệu chính thức https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html Họ gọi đó là phần còn lại * * nhà điều hành – Kalzem

Các vấn đề liên quan