Swift 3中的模数运算符(%)是什么?

36

我有这样一行代码:

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

而 Xcode 8(Swift 3)告诉我:

'%' is unavailable: Use truncatingRemainder instead

现在没有运算符了吗?我应该如何转换我的代码?


1
在Swift中,%运算符是一个余数运算符而不是模运算符。这里有一些相关讨论:https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160523/018679.html - wazy
我是用这种方式做的.. - Dimple Shah
6个回答

37

您可以简单地按照诊断信息进行操作:

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

或者使用arc4random_uniform(_:)可能是更好的选择。

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

34

这里输入图片描述

根据我的经验,当前在Swift 3.1版本中应该是可以使用的,因此可能已经被添加回来了。

我猜测它应该在Foundation框架中某个地方,并且需要显式地import Foundation

更新

这仅适用于整数类型。对于双精度浮点数,需要截断余数。


很奇怪,在https://apple.github.io/swift-evolution/上找不到有关Swift 3.1的任何信息。你这边没有第三方库可以引发这种行为吗? - Kalzem
2
哦,你说得对,我在官方文档中找到了一段关于它的内容:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html 他们称其为余数运算符。 - Kalzem

14

在取模之前,将您的变量转换为 Int

示例

let result = Int(value) % 3

5

根据新的指南,Swift 5已经发生了变化。

value.truncatingRemainder(dividingBy: 2)

1

您可以使用此代码来查找2个数字的模数。 label.text用于在我已经设计好的标签中显示结果

let result = Int(num1) % Int(num2)
label.text = String(Int(result))

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接