基本上,描述是可选输入,当输入例如“葡萄绿色”时,将抛出诸如“无效的索引范围”之类的错误。除了添加其他可以解决此问题的文本字段之外,还有其他方法可以通过扩展或其他方法使用吗?
let fruits = "\(textField.text!)"
let fruitsArray = fruits.split(separator: " ")
let fruitName = "\(fruitsArray[0])"
let fruitColour = "\(fruitsArray[1])"
let description = "\(fruitsArray[2])"
答案 0 :(得分:0)
在这种情况下(仍然发现在单个文本字段中要求三个不同的属性不是很明智),我建议为fruit
实现一个 template 。示例:
struct Fruit {
var name: String?
var colour: String?
var description: String?
init?(string: String) {
let array = string.trimmingCharacters(in: .whitespacesAndNewlines).components(separatedBy: " ").filter { !$0.isEmpty }
switch array.count {
case 3...:
fallthrough
case 3:
description = array[2]
fallthrough
case 2:
colour = array[1]
fallthrough
case 1:
name = array[0]
default:
return nil
}
}
}
这时,您可以通过传递一个字符串来声明一个Fruit
实例;因此:
let string = "Grapes green"
let fruit = Fruit(string: string)
print(fruit)
// Optional(__lldb_expr_21.Fruit(name: Optional("Grapes"), colour: Optional("green"), description: nil))