Невозможно преобразовать значение типа Int в ожидаемый тип аргумента UInt32.

Любые идеи о том, что я могу сделать, чтобы исправить эту ошибку, я пытаюсь получить десять случайных чисел, чтобы я мог запросить FireBase для набора вопросов, которые содержат случайные числа. Скриншот внизу. Я также добавил код...

import UIKit
import Firebase

class QuestionViewController: UIViewController {

var amountOfQuestions = 2

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)

    //Use a for loop to get 10 questions
    for _ in 1...10{
        //generate a random number between 1 and the amount of questions you have
        var randomNumber = Int(arc4random_uniform(amountOfQuestions - 1)) + 1

        //The reference to your questions in firebase (this is an example from firebase itself)
        let ref = Firebase(url: "https://dinosaur-facts.firebaseio.com/dinosaurs")
        //Order the questions on their value and get the one that has the random value
        ref.queryOrderedByChild("value").queryEqualToValue(randomNumber)
            .observeEventType(.ChildAdded, withBlock: {
                snapshot in
                //Do something with the question
                println(snapshot.key)
            })
    }    }



override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func truepressed(sender: AnyObject) {
}

@IBAction func falsePressed(sender: AnyObject) {
}

введите описание изображения здесь

3 ответа

Решение

Сделай свой amountOfQuestions переменная UInt32 а не Int выводится компилятором.

var amountOfQuestions: UInt32 = 2

// ...

var randomNumber = Int(arc4random_uniform(amountOfQuestions - 1)) + 1

arc4random_uniform требует UInt32,

Из документов Дарвина:

arc4random_uniform(u_int32_t upper_bound);

Объявите amountOfQuestions как UInt32:

var amountOfQuestions: UInt32 = 2

PS: Если вы хотите быть грамматически правильным, это количество вопросов.

Первое: метод "arc4random_uniform" ожидает аргумент типа UInt32, поэтому, когда вы помещаете туда это вычитание, он преобразует написанное вами "1" в UInt32.

Второе: в swift вы не можете вычесть UInt32 ("1" в вашей формуле) из Int (в данном случае "amountOfQuestions").

Чтобы решить все это, вам нужно рассмотреть вопрос об изменении объявления 'amountOfQuestions' на:

var amountOfQuestions = UInt32(2)

Это должно делать свое дело:)

Другие вопросы по тегам