2014-12-28 4 views
0

Ошибка я получаю cannot invoke '>' with an argument list of type '(() ->(), Int)'NSUserDefaults Сохранить Int - простое исправление

код работает, если var score = 0 находится внутри функции партитуры.

Где именно я должен хранить эту функцию, чтобы это работало, я планирую сделать кнопку, и когда она будет нажата, текст ярлыка myScore будет изменен на String(score), чтобы он отображался на счете. Я новичок в NSUserDefaults так легко идти :)

import UIKit 

var score = 0 

class ViewController: UIViewController { 

@IBOutlet weak var myScore: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

func score() { 
    NSUserDefaults.standardUserDefaults().integerForKey("highscore") 

    //Check if score is higher than NSUserDefaults stored value and change NSUserDefaults stored value if it's true 
    if score > NSUserDefaults.standardUserDefaults().integerForKey("highscore") { 
     NSUserDefaults.standardUserDefaults().setInteger(score, forKey: "highscore") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 

    NSUserDefaults.standardUserDefaults().integerForKey("highscore") 

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


} 
+0

где является актуальной проблемой? –

+0

'if score> NSUserDefaults.standardUserDefaults(). IntegerForKey (" highscore ")' '' '' это то, что вызывает его. @AdeelUrRehman –

+0

попытайтесь получить 'NSUserDefaults.standardUserDefaults(). IntegerForKey (" highscore ")' в переменной типа 'highScore' и проверить правильность значения, исходящего из значений по умолчанию. –

ответ

2

ошибки типа в Swift может быть немного вводит в заблуждение, но это один имеет смысл.

не может ссылаться на '>' со списком аргументов типа '(() ->(), Int)'

означает, что вы не можете вызвать функцию > (да, это функция) с левым боковым значением типа () ->() и значением правой стороны типа Int.

Левая сторона - это тип функции, который не принимает параметров и ничего не возвращает - и у вас есть функция, называемая score, которая делает именно это.

Компилятор использует эту функцию вместо глобальной переменной с тем же именем. Вы должны изменить имя функции score() - она ​​неопределенная и неясная в любом случае.

Вы также можете сделать переменную score переменной, а не глобальную переменную, но это отдельная проблема и не имеет прямого отношения к этой проблеме.

1

Ваше имя функции и имя этой переменной похожи. Вот почему вы получаете эту ошибку. Измените кого-нибудь из них.

Кроме того, почему вы просто звоните:

NSUserDefaults.standardUserDefaults().integerForKey("highscore") 

Вы не присваивая значение или вернуть его, то почему вы называете его несколько раз?

Измените метод, как:

func highScore() -> Int 
{ 
    var highScore = NSUserDefaults.standardUserDefaults().integerForKey("highscore") 

    //Check if score is higher than NSUserDefaults stored value and change NSUserDefaults stored value if it's true 
    if score > highScore 
    { 
     NSUserDefaults.standardUserDefaults().setInteger(score, forKey: "highscore") 
     NSUserDefaults.standardUserDefaults().synchronize() 
     highScore = score 
    } 
    return highScore; 
} 
+0

как бы я получить кнопку '@IBAction Func (отправитель: AnyObject) { счет ++ myScore.text = String (оценка) setHighScore() }' для отображения на экране, если пользователь получает до 5, где они может закрыть приложение, и они не должны перезапускаться с 0? @MidhunMP –

+0

@JustinRose: я обновил код: вы можете вызвать 'highScore()' Он будет возвращать highScore каждый раз –

+0

, где я могу вызвать функцию highScore в 'viewDidLoad()'? Большое вам спасибо за помощь @MidhunMP –

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