Swift Firebase项目,如何仅读取节点标题

时间:2018-07-11 16:27:50

标签: swift database firebase firebase-realtime-database

我正在开发一个包含用户客户端的应用程序,该客户端可以添加到表格视图中。我想访问客户端的Firebase数据库,以便可以在表视图中将每个客户端显示为单独的单元格。 screen cap of firebase

因此,在此示例中,我想取出名称“ Tyler Huan”和“ Johnny Sherman”以将它们附加到数组中,然后将它们放入我的表格视图中。如果我尝试通过以下方式以编程方式撤回客户财产:

ref = Database.database().reference()

    let userID = Auth.auth().currentUser?.uid

    Database.database().reference().child("users").child(userID!).observeSingleEvent(of: .value) { (snapshot) in
        print(snapshot)


        if let clients = snapshot.value as? [String: AnyObject] {
            if let clients2 = clients["Clients"] as? [String]{
                print(clients)
                print("this \(clients2)")
            }
        }
    }

它不能只删除名称,因为在这些名称下也是客户端属性。

感谢所有帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

如果只需要客户列表,则仅对客户列表使用引用,而不是对用户下所有信息的引用。在这种情况下,它将是 export class NationalitySelect extends Component { state = { showFormInput: false }; onSelect = (value) => { if (value === 'OT') { this.setState({ showFormInput: true }); } else { this.setState({ showFormInput: false }); } }; render() { const { decorator } = this.props; const { showFormInput } = this.state; return ( <FormItem {...layout} label="Nationality" colon required> <Col span={7}> <FormItem> {decorator('nationality', { initialValue: 'JP' })( <FormSelect onChange={value => this.onSelect(value)}> <Option value="JP">Japanese</Option> <Option value="SG">Singaporean</Option> <Option value="OT">Others</Option> </FormSelect>, )} </FormItem> </Col> {/* show text input if nationality is others */} {showFormInput && ( <Col span={17}> <FormItem> {decorator('otherNationality', { rules: [ { required: true, message: 'Please specify your nationality!', }, ], })(<FormInput type="text" />)} </FormItem> </Col> )} </FormItem> ); } } 。请记住,构建数据结构是一个好主意,这样您就可以在任何给定时间只下载所需的信息。调用ref.child("users/(userID!)/Clients")时,无论您是否需要,该参考下的所有数据都会下载。给定您当前的数据结构,这就是获取名称的方法:

observeSingleEvent

您可以在Firebase guide中查看示例。 但是话又说回来,如果有时候您需要客户名称而不是他们的公司,那么您可能想使用非规范化尝试其他结构。例如:

ref = Database.database().reference()
let userID = Auth.auth().currentUser?.uid
ref.child("users/(userID!)/Clients").observeSingleEvent(of: .value) { snapshot in
    for child in snapshot.children {
        print(child.key)
    }
}

以上结构假设您一天将需要为每个客户提供更多数据。它使您可以在需要时仅查询名称,而不查询整个配置文件。但是,如果您只需要他们的公司名称而没有配置文件,则可以将其作为值并将其名称作为键:

users: {
    uid1: {
        clientNames: {
            Johnny Sherman: true,
            Tyler Huan: true,
            //...
        }
        clientProfiles: {
            Johnny Sherman: {
                Company: "Apple",
                Phone: 8675309,
                Address: "Funkytown",
                //...
            }
            Tyler Huan: {
                Company: "Microsoft",
                Phone: 0118999881999199725...3,
                Address: "Sesame Street",  
            },
            //...
        }
    }
}

只需几个建议,以便更轻松地查询向前的数据!