如何将“文本(example1:“ ex1”,example2:“ ex2”)“转换为可用字典

时间:2019-08-31 04:51:47

标签: swift xcode dictionary

我真的是编程新手,我正在开发一个与运动和位置有关的应用程序。我无法从“词典”中获取特定项目,但是“词典”并不是真正的字典。

基本上,我有一个表视图,其中包含从Firebase Firestore数据集中获取的数据行,在点击一行后,我想将该行中的数据获取到另一个场景。

我尝试搜索类似的问题,但是输出

  

人员(名称:“ Test3”,邮政编码:“ 33333”,运动:“网球”,电子邮件:“ test3@email.com”)

(来自print(tappedRow)的)在我尝试let tappedEmail = tappedRow[3]时没有下标

我也尝试通过执行tappedRowlet tappedRow: Dictionary = peopleView.people[number] as! Dictionary转换为字典,但是据说这总是失败并给出错误

  

不能强制将'Person'类型的值转换为'Dictionary <_,_>'类型

这是代码的主要部分:

let number = myIndex
let tappedRow = peopleView.people[number]
print (tappedRow)
let tappedEmail = tappedRow[3]      <- Value of type 'Person' has no subscripts

print(tappedEmail)

let tappedUser = FirebaseFirestore.root.collection("users").document(tappedEmail)

peopleView是这个:

var myIndex = 0
var selectedPerson = ""

struct Person {
    let name, zip, sport, email: String
}


class PeopleViewController: UITableViewController {

    @IBOutlet var table: UITableView!

    var people = [Person]() as Dictionary
    private var document: [DocumentSnapshot] = []

    override public func viewDidLoad() {
        super.viewDidLoad()

        peopleView = self

    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let person = people[indexPath.row]
        let cell = self.table.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! Cell

        cell.name.text = person.name
        cell.sport.text = person.sport
        cell.zip.text = person.zip
        cell.email.text = person.email

        return cell
    }

    override public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        myIndex = indexPath.row

        performSegue(withIdentifier: "toTappedUser", sender: self)
    }

我期望它将带走被窃听的行,并从字典集中删除“电子邮件”,并使用它从Firebase调用getDocument。实际发生的是我收到此错误:

  

“人物”类型的值没有下标

我认为原因是因为Person(name: "Test3", zip: "33333", sport: "Tennis", email: "test3@email.com")并不是真正的字典,因为开头是Person,所以我想以某种方式将其转换为真实的字典,然后使用{{1} }。

我刚开始使用Firebase,所以很感谢。

1 个答案:

答案 0 :(得分:1)

什么都不做。请尝试了解错误

  

不能强制将'Person'类型的值转换为'Dictionary <_,_>'类型

表示PersonDictionary不相关。无论如何,桥强制转换毫无意义,因为自定义结构比字典更具体

var people = [Person]()
  

类型Person没有下标

默认情况下,自定义结构没有下标。而且,按索引进行下标还是错误的。看一下cellForRowAt中的代码,这里有获取例如struct成员值的正确方法

let tappedEmail = tappedRow.email

请阅读Language Guide以了解基础知识。