我得到的错误是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.
}
}
答案 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;
}