获取类型为'的转换值;字符串';至';日历标识符';将Swift 2转换为Swift 3后出错
将(我以前的工作)代码转换为获取类型为'的转换值;字符串';至';日历标识符';将Swift 2转换为Swift 3后出错,swift,Swift,将(我以前的工作)代码转换为SWIFT 3后,我在尝试编译和运行时收到一条错误消息: 无法将“String”类型的值转换为预期的参数类型 '日历.标识符' 粘贴发生问题的部分: var calendar = Calendar(identifier: NSGregorianCalendar) var birthday = calendar?.date(from: dateComponent) var currentDate = Date() Adn整个应用程序/代码: i
SWIFT 3
后,我在尝试编译和运行时收到一条错误消息:
无法将“String”类型的值转换为预期的参数类型
'日历.标识符'
粘贴发生问题的部分:
var calendar = Calendar(identifier: NSGregorianCalendar)
var birthday = calendar?.date(from: dateComponent)
var currentDate = Date()
Adn整个应用程序/代码:
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 {
} */
}
更改为以下内容:
var calendar=日历(标识符:。公历)
需要一个类型为NSCalendar.Identifier的参数
:
在Swift 3中,您想使用的(在您的案例中)是Calendar.Identifier.gregorian
。即
var calendar = Calendar(identifier: Calendar.Identifier.gregorian)
或者,简单地说
var calendar = Calendar(identifier: .gregorian)
写这个:-
var calendar=calendar(标识符:.gregorian)
&研究一下这个谢谢你,解决了我的问题。现在代码已编译并成功启动(agaian!)@斯波迪先生很乐意帮忙!我可以设置全局。我的应用程序很旧,我有一个大项目。。我已经使用了很多地方的日历。我可以设置全局。我的应用程序很旧,我有一个大项目。。我已经使用了很多地方的日历。我建议创建一个单例,这样你就可以从任何类访问一个日历对象。你说得对,它正在工作,但我的项目已经有5年历史,我的项目中使用了100个地方的日历。。我必须为此设置默认的gregorian.any sort cut方法..方法重写或其他一些东西。我建议创建一个单例,这样您就可以从任何类访问一个日历对象,然后用单例替换所有日历引用
var calendar = Calendar(identifier: .gregorian)