Swift 4 - 表达式类型'@lvalue String?'在没有更多上下文的情况下是模棱两可的 [英] Swift 4 - Expression type '@lvalue String?' is ambiguous without more context

查看:36
本文介绍了Swift 4 - 表达式类型'@lvalue String?'在没有更多上下文的情况下是模棱两可的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试记录我正在做的游戏的得分和高分.但我一直收到这个错误:

I'm trying to record a score and Highscore on a game that I'm doing. But I've been getting this error:

有关如何解决此问题的任何线索?我有 Xcode 10,我正在使用 Swift 4.提前致谢!

Any clues of how can I fix this? I have Xcode 10 and I'm working with Swift 4. Thanks in advance!

import UIKit
import Foundation

class ScoreVC: UIViewController {
    @IBOutlet weak var scoreLabel: UILabel!
    @IBOutlet weak var highscoreLabel: UILabel!

    @IBOutlet weak var reset: UIButton!
    @IBOutlet weak var points: UIButton!

    var Score = 0
    var Highscore = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        let HighscoreDefault = UserDefaults.standard

        if (HighscoreDefault.value(forKey: "Highscore") != nil) {
            Highscore = HighscoreDefault.value(forKey: "Highscore") as! Int
            highscoreLabel.text = NSString(format: "Highscore: %i", Highscore) as String
        }
    }

    @IBAction func resetButton(_ sender: Any) {
        Score = 0
        scoreLabel.text = NSString(format: "Score: %i", Score) as String
    }

    @IBAction func pointsButton(_ sender: Any) {
        Score +=
        scoreLabel.text = NSString(format: "Score: %i", Score) as String
        if (Score > Highscore) {
            Highscore = Score
            highscoreLabel.text = NSString(format: "Highscore: %i", Highscore) as String

            var HighscoreDefault = UserDefaults.standard
            HighscoreDefault.setValue(Highscore, forKey: "Highscore")
            HighscoreDefault.synchronize()
        }
    }
}

推荐答案

pointsButton 编辑这一行:

Score += 1

关于错误信息,

scoreLabel.text = NSString(format: "Score: %i", Score) as String

这里的 scoreLabel.text 是一个 lvalue,因为它存在于赋值运算符 = 的左侧.在前一行中,在您的原始代码中,Score += 需要一个 rvalue,并且赋值操作不能被视为右值.

Here scoreLabel.text is an lvalue since it exists on the left of the assignment operator =. In the line before, in your original code, Score += was expecting an rvalue and the assignment operation can't be treated as an rvalue.

这篇关于Swift 4 - 表达式类型'@lvalue String?'在没有更多上下文的情况下是模棱两可的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆