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

前端之家收集整理的这篇文章主要介绍了ios – ‘CountableClosedRange’类型的表达式模式不能匹配’Int’类型的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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"
    }
}

猜你在找的Xcode相关文章