旧版iOS版本的属性中的Swift Pass

时间:2017-10-11 00:39:04

标签: ios swift

作为一个例子说我有以下代码,它接受一个字符串和一个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上传递任何内容,或者没有任何内容或类似内容。

如何在仍然以最干净的方式编写不重复的代码的同时实现这一目标?

2 个答案:

答案 0 :(得分:0)

我实际上只是通过将代码更改为以下内容来解决此问题。

var items: [Item] = [
    TextField.init(title: "First Name", textContentType: {() in 
        if #available(iOS 10.0, *) { 
            return UITextContentType.givenName 
        } else { 
            return nil 
        } 
    }()),
]

如果其他人有关于如何使这段代码变得更干净和更短的想法,那就太棒了。

答案 1 :(得分:0)

代替零,您可以使用:

if #available(iOS 10.0, *) {
    return UITextContentType.givenName
} else {
    return UITextContentType(rawValue: "")
}