例如,我有下面的代码,它接受一个字符串和一个UITextContentType。
var items: [Item] = [
TextField.init(
title: "First Name",
textContentType: UITextContentType.givenName
),
]
但我的应用程序针对的是iOS 10之前实现UITextContentType的版本。处理这个问题的最佳方法是什么?
Xcode修复了它希望我@available
到封闭的var或类的问题。但这意味着在以前的版本中,我的应用程序会崩溃。
这里还有我设置textContentType的代码。
if #available(iOS 10.0, *) {
textField.textContentType = textContentType
}
所以基本上,我想说的是,如果它不在iOS上,什么都不传,或者零,或者诸如此类。
我如何在写代码时做到这一点,而代码不会重复太多,而且尽可能干净?
实际上,我只是通过将代码更改为以下内容来解决这个问题。
var items: [Item] = [
TextField.init(title: "First Name", textContentType: {() in
if #available(iOS 10.0, *) {
return UITextContentType.givenName
} else {
return nil
}
}()),
]
如果其他人对如何使代码更干净、更短有想法,那就太棒了。
代替nil,您可以使用:
if #available(iOS 10.0, *) {
return UITextContentType.givenName
} else {
return UITextContentType(rawValue: "")
}