相关疑难解决方法(0)

Swift结构和数组的冲突定义

在Swift编程语言中,它说:

  1. "Swift整数,浮点数,布尔值,字符串,数组和字典中的所有基本类型都是值类型,并且在幕后实现为结构."

  2. " 结构实例总是按值传递,类实例总是通过引用传递"

  3. "如果将Array实例分配给常量或变量,或者将Array实例作为参数传递给函数或方法调用,则不会在分配或调用发生时复制该数组内容.相反,两个数组共享相同的元素值序列.当你通过一个数组修改元素值时,结果可以通过另一个数组观察到."

很明显,Swift在阵列方面自相矛盾.数组是值类型还是引用类型?

swift

10
推荐指数
2
解决办法
4699
查看次数

Swift:如何通过引用而不是值来分配变量?

我正在尝试获取Array对它的引用并对其进行修改.因为ArraySwift中的s是值类型而不是引用类型,如果我首先将我的数组赋值给变量,我得到的是数组的副本而不是实际的数组:

var odds = ["1", "3", "5"]
var evens = ["2", "4", "6"]

var source = odds
var destination = evens

var one = odds.first!

source.removeFirst() // only removes the first element of the `source` array, not the `odds` array

destination.append(one)
Run Code Online (Sandbox Code Playgroud)

当我们查看oddsevens数组时,它们没有改变,因为我们更改了sourcedestination数组.

我知道我可以inout在函数上使用参数属性来通过引用而不是通过值传递它们:

func move(inout source: [String], inout destination: [String], value:String) {
    source.removeAtIndex(source.indexOf(value)!)
    destination.append(value)
}

move(&odds, destination: &evens, value:one)
Run Code Online (Sandbox Code Playgroud)

有没有办法通过引用而不是按值将这些数组分配给变量?

swift

10
推荐指数
2
解决办法
8480
查看次数

如何在Swift中获取指针(而不是副本)到数组?

在Swift中,将数组分配给新变量实际上是复制.例如(如在Apple doc for Array中):

var numbers = [1, 2, 3, 4, 5]
var numbersCopy = numbers
numbers[0] = 100
print(numbers)
// Prints "[100, 2, 3, 4, 5]"
print(numbersCopy)
// Prints "[1, 2, 3, 4, 5]"
Run Code Online (Sandbox Code Playgroud)

我如何实际获得指向同一数组的指针,因此修改元素会反映在同一个数组中?(原因是我在另一个类的静态实例中访问,例如"SomethingManager.sharedInstance.arrayList [aKey]",我想将它缩短为指定的指针变量.)

(我很想知道如何在Swift 4和5中执行此操作.我没有看到Swift语言存在任何问题.)

编辑:

我提供了我需要有一个指针而不是副本的理由.

说,我有以下代码:

var childrenTasks = [Int64: [TaskRef]]()
Run Code Online (Sandbox Code Playgroud)

在类中定义,可以访问:

MyClass.singleton.parentTask[parentTaskID].childrenTask[taskRefID]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,访问childrenTask的代码非常长.我想要一个指针,只是一个例子: -

var aPointerToChildrenTasks = MyClass.singleton.parentTask[parentTaskID].childrenTask[taskRefID] // I want a pointer, not a copy!
aPointerToChildrenTask.remove(at: anIndex) // if it is a pointer, I can manipulate the …
Run Code Online (Sandbox Code Playgroud)

arrays pointers swift

7
推荐指数
1
解决办法
331
查看次数

在 Swift 中修改作为参数传递给函数的数组

对不起,新手问题;我还在学习。我遇到了一些奇怪的行为,找不到任何关于此的文档。我想知道您是否可以帮助指出我在这里做错了什么。

错误:

不能对不可变值使用变异成员:“arr”是“let”常量

class mySingleton {
    static let sharedInstance = mySingleton()
    private init() {}

    var men = ["bob", "doug"]
    var women = ["alice", "lisa"]

    func removeFirst() {
        self.arr.removeFirst()
    }

    func removeFirstByGender(gender: String) {
        if gender == "men" {
              self.modify(arr: self.men) // <-- error occurs here.
        } else {
              self.modify(arr: self.women) // <-- error occurs here.
        }
    }

    func modify(arr: [String]) {
        arr.removeFirst()
    }
}
Run Code Online (Sandbox Code Playgroud)

swift

6
推荐指数
1
解决办法
2649
查看次数

Swift对数组的引用?

我可能错过了关于swift的重要信息.我有一个包含键/快速数组对的映射.我更改了数组,地图中的数组没有改变.有人可以解释发生了什么吗?谢谢!

var map = [String:[String]]()
var list = [String]()
map["list"] = list //output: "["list": []]\n"
print(map)

list.append("test")
print(list)  //output: "["test"]\n"
print(map)   //output: "["list": []]\n"
Run Code Online (Sandbox Code Playgroud)

arrays swift

4
推荐指数
1
解决办法
3155
查看次数

是否有可能避免swift中的结构变异?

是否可以让struct表现得像一个对象.铁:

var arr = [1]
let arr1 = arr 
arr.append(1)
Run Code Online (Sandbox Code Playgroud)

我想让arr1和arr一样.包装成对象是唯一的选择吗?

swift

1
推荐指数
1
解决办法
215
查看次数

标签 统计

swift ×6

arrays ×2

pointers ×1