2017-10-11 63 views
0

举个例子,我有以下代码需要一个字符串和一个UITextContentType。旧iOS版本中的Swift通过属性

var items: [Item] = [ 
    TextField.init(
     title: "First Name", 
     textContentType: UITextContentType.givenName 
    ), 
] 

但我的应用程序的目标是iOS 10之前的版本,其中实现了UITextContentType。处理这个问题的最佳方法是什么?

Xcode修复 - 它要我把@available封闭的var或class。但这意味着在以前的版本中我的应用程序会崩溃。

另外这里是我的代码,我设置textContentType。

if #available(iOS 10.0, *) { 
    textField.textContentType = textContentType 
} 

所以基本上我想说,如果它不是在iOS上通过任何东西,或零或沿着这些线的东西。

我该如何实现这一点,同时仍然编写不重复一吨且代码最简洁的代码?

回答

0

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

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

如果其他人有想法如何使这段代码更干净和更短,那将是非常棒的。

0

在地方的零,您可以使用:

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

什么是VS零到这样的好处? –