Использование random на swift [duplicate]

Я новичок в Swift, и я попытался использовать случайный, но у меня есть эта ошибка:

Невозможно добавить значение типа «[String]» с аргументом типа «UInt32».

Я не понимаю почему. Вот мой код:

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é"

    }
}

Всего 4 ответа


Используйте Int.random(in: 0..<Person.count) для генерации случайного индекса вместо этого!


В текущем контексте вы можете использовать диапазон для создания случайного индекса.

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 Person = ["jean Michel" , "antoine roubet" , "samuel demets" , "zater burkov", "Gochnik samuel"]
var randomIndex = arc4random_uniform(UInt32(Person.count))
var thePerson = Person[randomIndex]

в

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

Но еще лучше использовать Int.random как предлагали другие ответы.


Вместо использования импортированной функции C arc4random (). Теперь вы можете использовать собственный собственный случайный API Swift. Вызывая метод 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é"

    }
}

NB: переменная randomIndex, thePerson, randomIndex2, theCity , которые никогда не мутируют, должны быть изменены константами

Даже лучше, как предложено в комментарии ниже, просто используйте массивы .randomElement ()

таким образом ваш changeQuote () будет

@IBAction func changeQuote() {

    guard let thePerson = Person.randomElement() else { return }
    print(thePerson)

    guard let theCity = city.randomElement() else { return }
    print(theCity)

    quoteLabel.text = "le texte est modifié"
}

Есть идеи?

10000