获取类型' String'的转换值到' Calendar.Identifier'将Swift 2转换为Swift 3后出错

时间:2016-10-15 13:53:39

标签: swift

将(我之前的工作)代码转换为SWIFT 3后,我在尝试编译和运行时收到错误消息:

  

无法转换类型'字符串'的值预期的参数类型   ' Calendar.Identifier'

粘贴问题部分:

    var calendar = Calendar(identifier: NSGregorianCalendar)
    var birthday = calendar?.date(from: dateComponent)
    var currentDate = Date()

关于整个应用/代码:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate { //, UIPickerViewDataSource, UIPickerViewDelegate {


@IBOutlet weak var dayTextField: UITextField!
@IBOutlet weak var monthTextField: UITextField!
@IBOutlet weak var yearTextField: UITextField!

@IBOutlet weak var messageLabel: UILabel!

/*UI Picker data

var data = */

func textFieldDidBeginEditing(textField: UITextField) {
    let datePicker = UIDatePicker()
    textField.inputView = datePicker
} */


override func viewDidLoad() {
    super.viewDidLoad()
    dayTextField.delegate = self //dopisujemy delegate i u góry uitextfielddelegate
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.dismissKeyboard))
    view.addGestureRecognizer(tap)
}




//Calls this function when the tap is recognized.
func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)


}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

    // Dispose of any resources that can be recreated.
}



@IBAction func buttonPressed(_ sender: UIButton) {
    messageLabel.text = "Udało się!"

    var dateComponent = DateComponents()
    dateComponent.day =  Int(dayTextField.text!)! //1
    dateComponent.month = Int(monthTextField.text!)! //1
    dateComponent.year = Int(yearTextField.text!)! //2000


    //TextField - zamykanie klawiatury po nacisnieciu na ekran poza klawą






    var calendar = Calendar(identifier: NSGregorianCalendar)
    var birthday = calendar?.date(from: dateComponent)
    var currentDate = Date()






    //obie następne rzeczy printowane sa w konsoli XCode po naciśnieciu przycisku w aplikcaji
    print(birthday)
    print("Current Date is \(currentDate)")



    //sumowanie
    var datesDuration = (calendar as NSCalendar?)?.components(NSCalendar.Unit.day,
                                             from: birthday!,
                                             to: currentDate, options: [])



    //poniżej ! oznacza, iż nie jest to optional tylko na pewno var. Gdyby zostało ?, przy wyniku pojawił by nam się w aplikacji "otpional".

    var daysTogether = datesDuration!.day


    /*dodamy bajery aby było bardziej ładnie

    var numberFormatter = NSNumberFormatter()
    numberFormatter.usesGroupingSeparator = true

    var dayString = numberFormatter.stringFromNumber(daysTogether) */


    //wynik koncowy
    messageLabel.text = "Dni w związku: \(daysTogether) !! "



}

/*UIPicker nieskonczony

@available(iOS 2.0, *)
public func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {


}


@available(iOS 2.0, *)
public func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

} */


}

2 个答案:

答案 0 :(得分:2)

init(identifier:) failable initialize of Calendar需要一个NSCalendar.Identifier类型的参数:

init?(identifier calendarIdentifierConstant: NSCalendar.Identifier)

在Swift 3中,您想要使用的calendar identifier(在您的情况下)是Calendar.Identifier.gregorian。即。

var calendar = Calendar(identifier: Calendar.Identifier.gregorian)

或简单地

var calendar = Calendar(identifier: .gregorian)

答案 1 :(得分:0)

更改为以下

var calendar = Calendar(identifier: .gregorian)

valid types for Calendar in swift 3