NSUserDefaults保存int - 简单修复

时间:2014-12-28 05:59:52

标签: ios swift nsuserdefaults

我得到的错误是cannot invoke '>' with an argument list of type '(() -> (), 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.
}


}

2 个答案:

答案 0 :(得分:2)

Swift中的类型错误可能有点误导,但这个有意义。

  

无法调用'>'使用类型'(() - >(),Int)'

的参数列表

表示您无法使用类型为>的左侧值和类型为() -> ()的右侧值调用Int函数(是的,它是一个函数)。

左侧是一个函数类型,它不带任何参数并且不返回任何内容 - 而且你有一个名为score的函数可以做到这一点。

编译器正在使用函数而不是具有相同名称的全局变量。您应该更改score()函数的名称 - 无论如何它都是模糊且不清楚的。

您可能还希望将score变量设为属性而不是全局变量,但这是一个单独的问题,与此问题没有直接关系。

答案 1 :(得分: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;
}