iOS随机数生成器到一个新视图

时间:2012-03-05 20:20:27

标签: objective-c ios xcode ipad

我需要一些应用程序的帮助。我需要为0到15之间的整数创建一个随机数生成器,然后根据创建的数字推送到具有相应数字的视图。 这就是我希望它工作的方式

按下按钮 - >随机数发生器给出0到15之间的数字 - >视图将推送到另一个已分配了随机数生成器所给出的编号的视图。

有人可以帮我解决这些问题吗? 感谢

7 个答案:

答案 0 :(得分:97)

arc4random()是标准的Objective-C随机数生成器函数。它会给你一个零到......之间的数字,超过十五!您可以使用以下代码生成0到15之间的数字(所以,0,1,2,... 15):

NSInteger randomNumber = arc4random() % 16;

然后你可以执行切换或一系列if / else语句来推送不同的视图控制器:

UIViewController *viewController = nil;
switch (randomNumber)
{
    case 0:
        viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    break;
    // etc ...
}

[self.navigationController pushViewController:viewController animated:YES];

或者更确切地说,在重新阅读问题时,它将如下所示:

UIViewController *viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" 
viewController.number = randomNumber;

你在MyViewController子类上有一个NSInteger属性。

答案 1 :(得分:19)

您可以使用arc4random_uniform

NSUInteger r = arc4random_uniform(16);

答案 2 :(得分:10)

根据Apple的说法,最好的方法是使用arc4random_uniform并传递上限:

arc4random_uniform(16)

来自文档:

  

arc4random_uniform()将返回均匀分布的随机数   小于upper_bound。建议使用 arc4random_uniform()   像``arc4random()%upper_bound''等结构。因为它避免了" modulo   偏压"当上限不是2的幂时。

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/arc4random.3.html

答案 3 :(得分:9)

    int randomIndex = arc4random() % 14 + 1 ; // gives no .between 1 to 15 ..

    switch (randomIndex)
{
    case 0 :
    push view 1 ;
    break;

    case 1:
    ...

}

答案 4 :(得分:0)

我们可以使用C函数rand()

这将生成1到30之间的整数。或者,您可以使用arc4random函数,如下所示:

int i = arc4random() % 30;
NSLog(@"Random Number: %i", i);

答案 5 :(得分:0)

在Swift 4.2中,我们不必调用某些“ arc4random_uniform”函数来创建随机数,现在我们只需调用函数“ random(in:RANGE)”即可。

//Create Random numbers Swift 4.2

//Int
let randomInt = Int.random(in: 1...10)

//Double
let radomDouble = Double.random(in: 1...10)

//Float
let randomFloat = Double.random(in: 1...10)

答案 6 :(得分:0)

extension CGFloat {
   static func random() -> CGFloat {
       return CGFloat(arc4random()) / CGFloat(UInt32.max)
   }
}