xcode Swift 4 - 表达式类型'@lvalue String?' 在没有更多上下文的情况下是模棱两可的

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/52655459/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 10:50:13  来源:igfitidea点击:

Swift 4 - Expression type '@lvalue String?' is ambiguous without more context

xcodeswift4

提问by Jose Fermin

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

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

enter image description here

在此处输入图片说明

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

我该如何解决这个问题的任何线索?我有 Xcode 10,我正在使用 Swift 4。提前致谢!

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

回答by Hemraj Jhariya

Edit this line from pointsButton :

从 pointsButton 编辑此行:

 guard let scoreLabel = scoreLabel.text else {
            return
        }

回答by ielyamani

Edit this line from pointsButton:

编辑此行pointsButton

Score += 1

As to the error message,

至于错误信息,

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

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

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