将(我之前的工作)代码转换为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 {
} */
}
答案 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)