【问题标题】:How can i add a value in an Array which is inside a struct (Swift)如何在结构内的数组中添加值(Swift)
【发布时间】:2016-07-06 13:51:28
【问题描述】:

我有这个结构:

struct Event {
        var nameEvent: String
        var nameMagazi: String
        var objectId: String
        var typeEvent: NSArray
    }

我用它来制作一个包含这四个变量的字典,如下所示:

     for object in objects {

                            let post = object["idEvent"] as? PFObject
                            let post2 = post!["idMagazi"] as? PFObject
                            let post3 = object["eventType"] as? PFObject
                            let nameevent = post!["name"] as! String
                            let idevent = post?.objectId
                            let namemagazi = post2!["name"] as! String
                            let typeevent = post3!["EventName"] as! String
                            var count = 0
                            for index in 0...self.i {
                                if  self.events[index]?.objectId == idevent  {
                                    count += 1
                                    self.dump = index
                                }

                            }


                         if count == 0 {

       self.events[self.countids] = Event(nameEvent: nameevent , nameMagazi: namemagazi , objectId: idevent!, typeEvent: [typeevent])
                                self.countids += 1
                            }else{

  self.events[self.dump]!.typeEvent = [self.events[self.dump]!.typeEvent, typeevent]


          }

                            self.i += 1
                        }

如您所见,如果我找到重复项,我只想将 typeevent 添加到现有数组中。

 self.events[self.dump]!.typeEvent = [self.events[self.dump]!.typeEvent, typeevent]

这行有效,但就像它在另一个数组中返回数组一样:

(
        (
                (
                        (
                                (
                                        (
                        "\U0395\U03bb\U03bb\U03b7\U03bd\U03b9\U03ba\U03ac"
                    ),
                    mainstream
                ),
                hiphop
            ),
            house
        ),
        rnb
    ),
    Live
)

【问题讨论】:

  • 你的缩进……有创意吗?
  • 为了鼓励好的答案,您应该将问题格式化为minimal, complete, and verifiable example。最好的办法是把你的代码放到一个操场上,看看它是否有效。如果不是,那么您应该修剪/修改它,直到它完成为止。这样别人就可以以你为榜样,轻松找出问题所在。
  • 感谢@ColGraff 的建议,我会尽力解决我的下一个问题!此代码是从解析获取结果的查询。我的问题不需要这个查询,这就是我没有完成所有问题的原因。
  • @AMomchilov 我不明白你的意思。 ://
  • 你为什么这么说? @AMomchilov

标签: ios arrays swift struct


【解决方案1】:

要将值添加到数组typeEvent,请在结构中创建一个变异函数

struct Event {
  var nameEvent: String
  var nameMagazi: String
  var objectId: String
  var typeEvent: [String]

  mutating func addEvent(event : String) {
    typeEvent += [event]
  }
}

我将 typeEvent 从未指定类型 NSArray 更改为 Swift 原生类型 [String]

现在你可以写了

var event = Event(nameEvent: "Foo", nameMagazi: "Bar", objectId: "Baz", typeEvent: ["alpha", "beta", "gamma"])
event.addEvent("delta")
event.typeEvent // -> ["alpha", "beta", "gamma", "delta"]

【讨论】:

  • 请注意,这只是“创建新结构并用新结构替换旧结构”的语法糖。结构是value types,只能创建和复制,不能修改。这样做可能比在结构中添加一个函数更清楚。
  • 感谢您的回答!我没想过要制作像 [string] 这样的数组,我可能只是卡住了。明天我会试试你的答案,因为我现在还没有访问!
  • @ColGraff 这不是真的。来自文档:结构和枚举是值类型。默认情况下,值类型的属性不能从其实例方法中修改。但是,如果您需要在特定方法中修改结构或枚举的属性,您可以为该方法选择 mutating 行为。然后,该方法可以在方法内改变(即更改)其属性,并且当方法结束时它所做的任何更改都会写回原始结构
  • @vadian 是的,你完全正确。我误解了变异函数是如何在幕后工作的,进一步的调查消除了我的误解。谢谢!
猜你喜欢
  • 2021-04-12
  • 2021-02-23
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多