加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – ‘CountableClosedRange’类型的表达式模式不能匹配’Int

发布时间:2020-12-14 18:10:07 所属栏目:百科 来源:网络整理
导读:在 Swift 3之前的某个时刻,这段代码可以在没有任何编译错误的情况下工作,但是在转换为Swift 3之后,这段代码没有编译,我也不完全理解值类型是如何不同的. 给出的错误是’CountableClosedRange Int‘类型的表达模式对于我在switch语句中尝试使用不同值范围的交
在 Swift 3之前的某个时刻,这段代码可以在没有任何编译错误的情况下工作,但是在转换为Swift 3之后,这段代码没有编译,我也不完全理解值类型是如何不同的.

给出的错误是’CountableClosedRange< Int>‘类型的表达模式对于我在switch语句中尝试使用不同值范围的交换机情况,无法匹配“Int”类型的值:

switch hour {
        case 0 ... 11:
            greetingStatement.text = "Good Morning"
        case 12 ... 24:
            greetingStatement.text = "Good Evening"
        default:
            greetingStatement.text = "Hello"
        }

这是完整的代码:

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var userInput: UITextField!
    @IBOutlet weak var usertOutput: UILabel!

    @IBOutlet weak var tapMeAfterEnteringYourName: UIButton!

    @IBOutlet weak var greetingStatement: UILabel!
    @IBOutlet weak var letsGetStartedLabel: UILabel!

    @IBOutlet weak var ballonsImageView: UIImageView!
    @IBOutlet weak var teacherPointingToBoardImage: UIImageView!
    @IBAction func setOutput(_ sender: AnyObject){
        greetingStatement.isHidden = false
        usertOutput.text=userInput.text
        tapMeAfterEnteringYourName.isHidden = true
        userInput.isHidden = true
        letsGetStartedLabel.isHidden = false
        ballonsImageView.isHidden = false

        let date = Date()
        let calendar = Calendar.current
        let components = (calendar as NSCalendar).components([.hour],from: date)
        let hour = components.hour
        switch hour {
        case 0 ... 11:
            greetingStatement.text = "Good Morning"
        case 12 ... 24:
            greetingStatement.text = "Good Evening"
        default:
            greetingStatement.text = "Hello"
        }
        view.backgroundColor = UIColor.magenta
        teacherPointingToBoardImage.isHidden=true

        var timer = Timer.scheduledTimer(timeInterval: 1.4,target: self,selector: #selector(ViewController.updateViewController),userInfo: nil,repeats: false)


        let hover = CABasicAnimation(keyPath: "position")
        hover.isAdditive = true
        hover.fromValue = NSValue(cgPoint: CGPoint.zero)
        hover.toValue = NSValue(cgPoint: CGPoint(x: 0.0,y: -100.0))
        hover.autoreverses = true
        hover.duration = 5
        hover.repeatCount = Float.infinity
        ballonsImageView.layer.add(hover,forKey: "myHoverAnimation")



    }

    func updateViewController() {

        print("Timer just fired")
        let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle:nil)
        let resultViewController = storyBoard.instantiateViewController(withIdentifier: "MadLibOneViewController") as! MadLibOneViewController
        self.present(resultViewController,animated:true,completion:nil)

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor=UIColor.purple
        usertOutput.textColor=UIColor.white
        userInput.textColor = UIColor.purple
        greetingStatement.isHidden = true
        letsGetStartedLabel.isHidden = true
        ballonsImageView.isHidden = true







    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}

有人可以澄清这只是一个通用的任何类型的Int是允许的还是预期的?

解决方法

该错误具有误导性.问题是小时是可选的Int.

我会将代码更改为:

if let hour = components.hour {
    switch hour {
    case 0 ... 11:
        greetingStatement.text = "Good Morning"
    case 12 ... 24:
        greetingStatement.text = "Good Evening"
    default:
        greetingStatement.text = "Hello"
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读