在swift上使用随机

在swift上使用随机,swift,string,random,Swift,String,Random,我是swift的初学者,我曾尝试使用random,但我有以下错误: 无法使用“UInt32”类型的参数为“[String]”类型的值下标 我不明白为什么。这是我的密码: import UIKit class ViewController: UIViewController { var Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]

我是swift的初学者,我曾尝试使用random,但我有以下错误:

无法使用“UInt32”类型的参数为“[String]”类型的值下标

我不明白为什么。这是我的密码:

import UIKit

class ViewController: UIViewController {

    var Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]

    var city = ["De Paris","De Monreal","Du Maroc","De Tunis","De sarcelles","De roubaix"]

    @IBOutlet weak var quoteLabel: UILabel!

    @IBAction func changeQuote() {

        var randomIndex = arc4random_uniform(UInt32(Person.count))
        var thePerson = Person[randomIndex]
        print(thePerson)

        var randomIndex2 = arc4random_uniform(UInt32(city.count))
        var theCity = city[randomIndex2]
        print(theCity)

        quoteLabel.text = "le texte est modifié"

    }
}

在当前上下文中,可以使用范围生成随机索引

var randomIndex = Int.random(in: 0...Person.count-1)
var randomIndexTwo = Int.random(in: 0...city.count-1)

var thePerson = Person[randomIndex]
var theCity = city.count[randomIndexTwo]
但使用数组上的方法检索随机元素可能更容易,因为如果数组为空,则该方法是类型安全的。这是一条线

var thePerson = Person.randomElement()
var theCity = city.randomElement()

在当前上下文中,可以使用范围生成随机索引

var randomIndex = Int.random(in: 0...Person.count-1)
var randomIndexTwo = Int.random(in: 0...city.count-1)

var thePerson = Person[randomIndex]
var theCity = city.count[randomIndexTwo]
但使用数组上的方法检索随机元素可能更容易,因为如果数组为空,则该方法是类型安全的。这是一条线

var thePerson = Person.randomElement()
var theCity = city.randomElement()

而不是使用导入的C函数arc4random()。 您现在可以使用Swift自己的本机随机API。 通过对任何具有所需范围的数字类型调用
random()
方法

import UIKit

class ViewController: UIViewController {

    var Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]

    var city = ["De Paris","De Monreal","Du Maroc","De Tunis","De sarcelles","De roubaix"]

    @IBOutlet weak var quoteLabel: UILabel!

    @IBAction func changeQuote() {

        let randomIndex = Int.random(in: Person.indices)
        let thePerson = Person[randomIndex]
        print(thePerson)

        let randomIndex2 = Int.random(in: city.indices)
        let theCity = city[randomIndex2]
        print(theCity)

        quoteLabel.text = "le texte est modifié"

    }
}
注意:变量的
randomIndex、person、randomIndex2、theCity
如果从未发生突变,则应更改为常量

正如下面评论中所建议的那样,使用array.randomElement()就更好了

因此,您的changeQuote()将


而不是使用导入的C函数arc4random()。 您现在可以使用Swift自己的本机随机API。 通过对任何具有所需范围的数字类型调用
random()
方法

import UIKit

class ViewController: UIViewController {

    var Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]

    var city = ["De Paris","De Monreal","Du Maroc","De Tunis","De sarcelles","De roubaix"]

    @IBOutlet weak var quoteLabel: UILabel!

    @IBAction func changeQuote() {

        let randomIndex = Int.random(in: Person.indices)
        let thePerson = Person[randomIndex]
        print(thePerson)

        let randomIndex2 = Int.random(in: city.indices)
        let theCity = city[randomIndex2]
        print(theCity)

        quoteLabel.text = "le texte est modifié"

    }
}
注意:变量的
randomIndex、person、randomIndex2、theCity
如果从未发生突变,则应更改为常量

正如下面评论中所建议的那样,使用array.randomElement()就更好了

因此,您的changeQuote()将


如果您只想编译代码,只需更改

var Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]
var randomIndex = arc4random_uniform(UInt32(Person.count))
var thePerson = Person[randomIndex]


但最好像其他答案所建议的那样使用
Int.random

如果您只是想编译代码,只需更改即可

var Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]
var randomIndex = arc4random_uniform(UInt32(Person.count))
var thePerson = Person[randomIndex]


但是最好像其他答案所建议的那样使用
Int.random

你的方向是正确的,但是这里有很多问题。1)
随机索引
人员
随机索引x2
城市
2)不必要的可变性。不要像
0..
那样编写代码。这是错误的倾向。使用
array.index
。3) 你只需在数组上使用
.randomElement()
,它就可以对数组和边界进行检查,Hank的@Alexander更新了答案。你的方向是正确的,但这里有很多问题。1)
随机索引
人员
随机索引x2
城市
2)不必要的可变性。不要像
0..
那样编写代码。这是错误的倾向。使用
array.index
。3) 您只需在数组上使用
.randomElement()
,它就可以对数组进行调整,并对YouTunk的@Alexander更新答案进行边界检查。不相关但重要的是:1)在Swift中,值应具有
小写
名称<代码>大写
名称仅为类型保留。2) 通过使数组的名称具有复数形式,可以更清楚地表示数组<代码>人
而不是
城市
而不是
城市
。另外,您不必添加任意单词,如
the
来区分
let city=cities.randomElement()
。简单!不相关但重要的:1)Swift中的值应具有
lowerCamelCase
名称<代码>大写名称仅为类型保留。2) 通过使数组的名称具有复数形式,可以更清楚地表示数组<代码>人而不是
城市
而不是
城市
。另外,您不必添加任意单词,如
the
来区分
let city=cities.randomElement()
。简单!永远不要对像'0..这样的代码进行正确的操作,更不要说0…Person.count-1`当
Person
数组为空时,它会崩溃,并且通常容易出错。使用
Array.index
以无错误的方式获取索引范围。更好的是,只需调用
.randomIndex()
。永远不要对像'0..这样的代码进行修改,更不用说0…Person.count-1`当
Person
数组为空时,它会崩溃,并且通常容易出错。使用
Array.index
以无错误的方式获取索引范围。更好的是,只需调用
.randomIndex()