索引可能不存在(TextField)Swift XCode

时间:2019-03-10 15:02:14

标签: arrays swift

基本上,描述是可选输入,当输入例如“葡萄绿色”时,将抛出诸如“无效的索引范围”之类的错误。除了添加其他可以解决此问题的文本字段之外,还有其他方法可以通过扩展或其他方法使用吗?

let fruits = "\(textField.text!)"
let fruitsArray = fruits.split(separator: " ")
let fruitName = "\(fruitsArray[0])"
let fruitColour = "\(fruitsArray[1])"
let description = "\(fruitsArray[2])"

1 个答案:

答案 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))