2016-02-22 6 views
2

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

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) { 
} 

enter image description here

+0

Пробовали ли вы кастинг (amountOfQuestions - 1) к UInt32? – yesthisisjoe

ответ

2

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

var amountOfQuestions: UInt32 = 2 

// ... 

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

arc4random_uniform требует UInt32.

Из Darwin docs:

arc4random_uniform(u_int32_t upper_bound); 
+2

Кроме того, стоит отметить, что если вычисляется 'amountOfQuestions', например, из размера массива, подходящим ответом может быть просто передать его в UInt32 с помощью конструктора, то есть UInt32 (questions.count). –

+0

@DavidBerry по какой-то причине не работает –

5

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

var amountOfQuestions: UInt32 = 2 

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

3

Первое: Метод «arc4random_uniform» ожидает аргумент типа UInt32, поэтому, когда вы выставляете это вычитание, он преобразует «1», который вы написали в UInt32.

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

Чтобы решить все это, вы должны рассмотреть вопрос об изменении декларации «amountOfQuestions» в:

var amountOfQuestions = UInt32(2) 

Это должно сделать трюк :)

+0

Ваша вторая часть, хотя частично верно (это правда, что вы не можете вычесть UInt32 из Int), не имеет значения. В этом случае 1 будет автоматически соответствовать соответствующему типу, в этом случае Int должен соответствовать количествуOfQuestions для работы вычитания. Проблема в том, что Int не может быть передан в arc4random_uniform, который ожидает аргумент UInt32. Обратите внимание, что вполне корректно использовать 'UInt32 (2) - 1', и результатом является также UInt32 (поэтому ваше фактическое исправление работает) –

+0

Вторая часть была использована для завершения этой мысли. В коде, представленном вопросом, amountOfQuestions не был UInt32. В моем ответе было только одно решение, я просто сломался на двух, чтобы он понял это лучше. То, что вы сказали о том, чтобы быть совершенным в UInt32, известно и совершенно не имеет значения ... – gaskbr

Смежные вопросы

 Смежные вопросы