旧版iOS上的Swift Pass-in属性



例如,我有下面的代码,它接受一个字符串和一个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: "")
}

最新更新