Cos*_*ows 4 xcode ios swift swift3
在Swift 3之前的某个时刻,这段代码可以在没有任何编译错误的情况下工作,但是在转换为Swift 3之后,这段代码没有编译,我也不完全理解值类型是如何不同的.
给出的错误是expression pattern of type 'CountableClosedRange<Int>' cannot match values of type 'Int'针对我试图在switch语句中使用不同值范围的切换情况:
switch hour {
case 0 ... 11:
greetingStatement.text = "Good Morning"
case 12 ... 24:
greetingStatement.text = "Good Evening"
default:
greetingStatement.text = "Hello"
}
Run Code Online (Sandbox Code Playgroud)
这是完整的代码:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以澄清这只是一个通用的任何类型的Int是允许的还是预期的?
rma*_*ddy 12
该错误具有误导性.问题是这hour是一个可选的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"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |