相关疑难解决方法(0)

为什么选择Struct Over Class?

使用Swift,来自Java背景,为什么要选择Struct而不是Class?看起来它们是相同的,使用Struct提供更少的功能.为什么选择呢?

struct class design-principles swift

465
推荐指数
10
解决办法
14万
查看次数

在多个线程中向Swift阵列添加项目导致问题(因为数组不是线程安全的) - 我该如何解决这个问题?

我想将给定的块添加到数组中,然后在请求时运行数组中包含的所有块.我有类似这样的代码:

class MyArrayBlockClass {
    private var blocksArray: Array<() -> Void> = Array()

    private let blocksQueue: NSOperationQueue()

    func addBlockToArray(block: () -> Void) {
        self.blocksArray.append(block)
    }

    func runBlocksInArray() {
        for block in self.blocksArray {
            let operation = NSBlockOperation(block: block)
            self.blocksQueue.addOperation(operation)
        }

        self.blocksQueue.removeAll(keepCapacity: false)
    }
}
Run Code Online (Sandbox Code Playgroud)

问题在于可以跨多个线程调用addBlockToArray.发生的事情是addBlockToArray在不同的线程中快速连续调用,并且只附加其中一个项目,因此在runBlocksInArray期间不会调用另一个项目.

我尝试过这样的东西,但似乎不起作用:

private let blocksDispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

func addBlockToArray(block: () -> Void) {
    dispatch_async(blocksDispatchQueue) {
        self.blocksArray.append(block)
    }
}
Run Code Online (Sandbox Code Playgroud)

arrays multithreading read-write grand-central-dispatch swift

16
推荐指数
2
解决办法
1万
查看次数

Apple对具有多个线程的引用和值类型的描述

我正在阅读Apple的文档.我以为我知道何时选择值类型以及何时选择引用类型,但我回到Swif101.文件说:

  • 值类型:数据将用于跨多个线程的代码中.
  • 引用类型:您希望创建共享的可变状态

多个线程之间是否也共享引用类型?这两条线有什么区别?

multithreading struct class swift

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