我是StackOverflow的新手,所以如果有更好的方法发布问题,请纠正我,这是现有问题的特定情况。
Alberto Barrera回答 How does one seed the random number generator in Swift?
带
let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand(time)
print("Random number: \(rand()%10)")
这一般是完美的,但是当我在The IBM Swift Sandbox中尝试它时,它每次运行都会给出相同的数字序列,至少在半小时的时间内。
import Foundation
import CoreFoundation
let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand(time)
print("Random number: \(rand()%10)")
目前,每次Run都会打印5。
有没有人找到在IBM Sandbox中执行此操作的方法?我发现random()和srandom()产生一个不同的数字序列,但每次Run都是相同的。我还没有在Foundation,CoreFoundation,Darwin或Glibc中找到arc4random()。
顺便说一句,我谦卑地建议声誉超过1500的人创建一个标签IBM-Swift-Sandbox。
答案 0 :(得分:2)
这是我们在Sandbox中实现服务器端缓存的方式的问题;非确定性代码将不断返回相同的答案,即使它不应该。我们暂时禁用它,你应该在每次运行时获得不同的结果。我们目前正在开发更好的机制来确保Sandbox的可扩展性。
我也会看到那个标签!
答案 1 :(得分:1)
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
/* Change Button state here */
}
});
按预期工作。如果您每次在srand
而不是let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
中使用任意数字更改值,则会输出随机数。
也许这是一个缓存问题,它只是没有看到代码中的任何更改,也没有发送它进行重新编译:)
答案 2 :(得分:0)
我不知道发生了什么,但今天它完全正常。所以我想这个问题已经回答:
srand(UInt32(NSDate().timeIntervalSinceReferenceDate))
工作正常。
(我认为一定有些变化。它在两台不同的计算机上的表现方式相同(重复尝试产生相同的数字)大约10天......奇怪。)