Swift 4阵列获取参考

时间:2018-08-17 21:28:14

标签: arrays swift class var

我在Swift中遇到了数组问题。问题在于它是Swift中的值类型。我正在尝试找到解决方法。 这是我的代码:

class Object: Codable{
    var name : String?
}

var objects: Array<Object>?
objects = Array<Object>()
if var obj = objects { // <----- Creates a copy of array here
    let o = Object()
    o.name = "1"
    objects?.append(o)
    print(obj) //<----- this one is missing "o" object
    print(objects)
}

我不能使用NSMutableArray,因为我在另一个可编码类中有一个数组。

每个人对此有何经验?如果有人可以为此提供解决方案。

2 个答案:

答案 0 :(得分:0)

习惯作为值类型的数组并不是很困难。如果我是您,我的代码版本将如下所示

var objects: Array<Object>?
objects = Array<Object>()
if var unwrappedObjs = objects {
    let o = Object()
    o.name = "1"
    unwrappedObjs.append(o)
    objects = unwrappedObjs
}

或者也许是这样:

var objects: Array<Object>?
objects = Array<Object>()
if objects != nil {
    let o = Object()
    o.name = "1"
    objects?.append(o)
}

最后,您始终可以尝试制作自己的“ ReferenceArray”类,该类包装数组API并为您提供引用语义,但这似乎有点过头了。很快就应该自然而然地将数组作为值类型了。

答案 1 :(得分:0)

bitwit已经提到了这一点,但是我认为您最大的错误就是根本不接受新对象作为源。除非保留$shiftings = Shifting::with('users')->get(); dd($shiftings); 很重要,否则应将其替换为Array<Object>?

Array<Object>

如果需要在同一范围内,请使用var objects: Array<Object>? objects = Array<Object>() if var objects = objects { // <----- Creates a copy of array here let o = Object() o.name = "1" objects.append(o) // objects is now the non-optional one print(objects) }

guard

如果您绝对需要引用数组,则可以创建一个容器类:

var objects: Array<Object>?
objects = Array<Object>()

guard var objects = objects else { // <----- Creates a copy of array here
    fatalError()
}

let o = Object()
o.name = "1"
objects.append(o) // objects is now the non-optional one
print(objects)