通过使用Swift 3.0

时间:2016-12-14 22:10:29

标签: swift

我有一个用于保存数据的结构;

struct MyStruct {
  var age: Int
  var name: String
}

我制作了一个数组,并用数据填充;

var myArray = [MyStruct]()
myArray[0] = MyStruct(age: 26, name: "John")
myArray[1] = MyStruct(age: 35, name: "Smith")

如何在myArray中找到包含名称“Smith”的元素索引?

编辑:这里有更多关于我需要使用Losiowaty的新代码找到位置的背景信息;

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
  let selection = tableView.cellForRow(at: indexPath)?.textLabel
  let name = selection!.text!
  let location = myArray.index(where: { $0.name == name})

  //additional code to comply with the function and return, unneeded for this context
}

3 个答案:

答案 0 :(得分:10)

您可以使用index(where:)方法。一个简单的例子:

let index = myArray.index(where: { $0.name == "Smith" })

如果没有这样的元素,该方法将返回nil

通过编辑的更多上下文,最好(即最安全)的方式是这样的:

if let name = selection?.name {
    if let location = myArray.index(where: { $0.name == name }) {
        // you know that location is not nil here
    }
}

来源 - https://developer.apple.com/reference/swift/array/1688966-index

答案 1 :(得分:0)

对于Swift 4:索引(其中:)已被弃用,因此现在使用firstIndex:

let index = firstIndex(where: { $0.name == "Smith" })

答案 2 :(得分:0)

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath:     IndexPath) {
    let MyStruct = myArray[indexPath.row]
    cell.yourLable?.text = MyStruct.name
       }