Метка intValue не отображается для работы больше, чем (>) - PullRequest
0 голосов
/ 30 октября 2018

Я новичок в Swift, код строится просто отлично, но доза больше, чем (>) не работает. Я пытаюсь произвести число с номером в ярлыке «totalCoal», но никогда не перебиваю второй ярлык «coalPileHolding». Я знаю, что этот код может быть лучше, но сначала я пытаюсь получить базовый. Я также знаю, что timeDiffernt ">" доза не работает, так что как-то я что-то упустил. Спасибо за вашу помощь

 @IBOutlet weak var coalPileHoldingLabel: UILabel!
func loadBigCoalPile () {
    var coalPileHolding = Int ()
    if UserDefaults.standard.object(forKey: "coalPileResearch") == nil {
        coalPileHolding = 0 } else {
        coalPileHolding = UserDefaults.standard.object(forKey: "coalPileResearch") as! Int}
    if coalPileHolding == 1 {
        let coalPileHolding = 200
        coalPileHoldingLabel.text = String(coalPileHolding) }
    if coalPileHolding == 2 {
        let coalPileHolding = 300
        coalPileHoldingLabel.text = String(coalPileHolding) }
    if coalPileHolding == 3 {
        let coalPileHolding = 400
        coalPileHoldingLabel.text = String(coalPileHolding) }

@objc func buttonIsInAction(){

}
@IBOutlet weak var coalRunButton: UIButton!

@IBAction func coalRunButton(_ sender: Any) {

    func getMillisecondsNow() -> Int64{
        let currentDate = Date()
        return getMillisecondsFromDate(date: currentDate)
    }
    func getMillisecondsFromDate(date: Date) -> Int64{
        var d : Int64 = 0
        let interval = date.timeIntervalSince1970
        d = Int64(interval * 1000)
        return d
    }
    func getTimeDifferenceFromNowInMilliseconds(time: Int64) -> Int64{
        let now = getMillisecondsNow()
        let diff: Int64 = now - time
        return diff
    }
    var terminationTime = Int64()
    if UserDefaults.standard.object(forKey: "latestTerminationDate") == nil {
        terminationTime = getMillisecondsNow()
        UserDefaults.standard.set(terminationTime, forKey:"latestTerminationDate")
        }
    else {

     terminationTime = UserDefaults.standard.object(forKey: "latestTerminationDate") as! Int64 }

   let timeDiff = getTimeDifferenceFromNowInMilliseconds(time: terminationTime)
    let timeDiffernt = Int(timeDiff)
    let now = getMillisecondsNow()
    UserDefaults.standard.set (now, forKey: "latestTerminationDate")
    if  timeDiffernt > 86400000 { _ = 86400000}

    var methodOfCut = Int ()
    var machineryButton = Int ()
    var qualityOfWorkers = Int ()
    if UserDefaults.standard.object(forKey: "methodOfCut") == nil {
        methodOfCut = 0 } else {
        methodOfCut = UserDefaults.standard.object(forKey: "methodOfCut") as! Int}
    if UserDefaults.standard.object(forKey: "machineryButton") == nil {
        machineryButton = 0 } else {
        machineryButton = UserDefaults.standard.object(forKey: "machineryButton") as! Int}
    if UserDefaults.standard.object(forKey: "qualityOfWorkers") == nil {
        qualityOfWorkers = 0 } else {
        qualityOfWorkers = UserDefaults.standard.object(forKey: "qualityOfWorkers") as! Int}

    let coalMayham = (machineryButton) + (qualityOfWorkers) + (methodOfCut)
    let (dailyCoalAccumulate) = ((timeDiffernt) * (coalMayham) + 1) / 10000

    var coalPileHolding2 = 0
    if let coalPile = Int(coalPileLabel.text!) {
    let totalCoal = (dailyCoalAccumulate) + coalPile
         coalPileHolding2 = Int(coalPileHoldingLabel.text!) ?? 0
    if totalCoal > coalPileHolding2 { coalPileHolding2 = totalCoal }

        coalPileLabel.text = String(totalCoal)
            UserDefaults.standard.set(totalCoal, forKey:"totalCoal")}
        callOutLabel.text = String(dailyCoalAccumulate)}}

1 Ответ

0 голосов
/ 30 октября 2018

Это сочетание числовых типов (Int32, Float, Int) довольно запутанно. В общем, вы хотите использовать Int или Double. Все остальные варианты следует использовать только в случае крайней необходимости, например, если API требует другого типа. Итак, давайте предположим, что dailyCoalAccumulate - это Int, и переключим все остальное на Int:

let coalPileHolding = 0 
if let coalPile = Int(coalPileLabel.text!) {
    let totalCoal = dailyCoalAccumulate + coalPile
    let coalPileHolding = Int((coalPileHoldingLabel.text as! NSString).intValue)
    if totalCoal > coalPileHolding {
        let coalPileHolding = totalCoal
    }
    coalPileLabel.text = String(totalCoal)
    UserDefaults.standard.set(totalCoal, forKey:"totalCoal") 
} 
callOutLabel.text = String(dailyCoalAccumulate)

Здесь intValue API NSString возвращает Int32, но я немедленно преобразую его в обычный Int. Но, конечно, есть лучший способ сделать это без необходимости подключаться к Objective-C NSString. Если строка не содержит числа intValue, просто возвращается ноль. Мы можем создать то же поведение, когда мы используем инициализатор Int для преобразования строки, а затем заменим значение nil на ноль: Int(coalPileHoldingLabel.text!) ?? 0.

Тогда у нас есть три разные переменные с именем coalPileHolding. Поскольку они определены в разных областях, они могут иметь одно и то же имя, но все еще являются разными переменными. Я предполагаю, что вы хотите обновить переменную coalPileHolding. Иначе присваивание во внутреннем if не имеет смысла - компилятор даже предупреждает об этом.

Итак, давайте изменим coalPileHolding на var и обновим его значение.

var coalPileHolding = 0 
if let coalPile = Int(coalPileLabel.text!) {
    let totalCoal = dailyCoalAccumulate + coalPile
    coalPileHolding = Int(coalPileHoldingLabel.text!) ?? 0
    if totalCoal > coalPileHolding {
        coalPileHolding = totalCoal
    }
    coalPileLabel.text = String(totalCoal)
    UserDefaults.standard.set(totalCoal, forKey:"totalCoal") 
} 
callOutLabel.text = String(dailyCoalAccumulate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...