【问题标题】:Unable to reach array->dict->set无法到达 array->dict->set
【发布时间】:2015-11-23 16:37:12
【问题描述】:

我想在数组中的字典中使用我的集合。但我无法达到它。这是代码。

class data: UIView {

    func myFunc() {

        var arr: Array<Dictionary<String,Any>> = []

        var dict: Dictionary<String,Any> = [:]

        dict.updateValue("Title1", forKey: "title")
        dict.updateValue("Direction 1", forKey: "directions")
        dict.updateValue(Set(["Item1"]), forKey: "items")

        arr.append(dict)

        dict.updateValue("Title2", forKey: "title")
        dict.updateValue("Direction 2", forKey: "directions")
        dict.updateValue(Set(["Item2"]), forKey: "items")

        arr.append(dict)

当我写作时

let set1 = arr[0]["items"] as? Set<String> ?? Set<String>()

比我想用这套

data.myFunc.set1

问题是,它只给了我带有括号的 data.myFunc() 属性。所以我无法进入。我做错了什么。感谢您的回答。

【问题讨论】:

    标签: xcode swift dictionary set swift2


    【解决方案1】:

    我简化了您的语法并提出了以下内容:

    func myFunc() {
    
        var arr = [[String : Any]]()
        var dict = [String : Any]()
    
        dict["title"] = "Title1"
        dict["directions"] = "Direction 1"
        dict["items"] = Set(arrayLiteral:"Item1")
    
        arr.append(dict)
    
        if let set1 = arr[0]["items"] as? Set<String> {
            print(set1)
        }
    }
    
    myFunc()
    

    这个的输出是:

    ["Item1"]
    

    【讨论】:

    • 对不起,我没有看到你的答案:-)。注意arrayLiteral:“Item1”并没有真正描述一个数组......
    【解决方案2】:

    您不能通过函数访问变量。相反,在这种情况下,我建议您返回该集合或将其存储在您的类中以供以后访问:

    class Data: UIView {
        var set = Set<String>()
    
        func myFunc() -> Set<String> {
            ...
            let set1 = arr[0]["items"] as? Set<String> ?? Set<String>()
    
            // store it
            set = set1
    
            // or return it
            return set1
        }
    }
    
    // access
    let data = Data()
    
    // fist way
    data.myFunc()
    let newSet = data.set
    
    // second way
    let newSet = data.myFunc()
    

    返回集合是首选方式。

    【讨论】:

    • 一切都很好,但我在最后一步遇到了问题。我用 let data 调用了 Data() 但在调用最后一行 data.myFunc() 后它说 - 实例成员 'data' 不能用于类型 'toolsPage' (这是另一个 viewController 页面)
    【解决方案3】:
    func myFunc() {
    
        var arr = [[String : Any]]()
        var dict = [String : Any]()
    
        dict["title"] = "Title1"
        dict["directions"] = "Direction 1"
        dict["items"] = Set(["Item1","Item2"])
    
        arr.append(dict)
    
        if let set1 = arr[0]["items"] as? Set<String> {
            print(set1, set1.dynamicType)
        }
    }
    
    myFunc()
    

    输出是

    ["Item2", "Item1"] Set<String>
    

    正如所料...

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2019-04-18
      • 2018-07-31
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多