相关疑难解决方法(0)

如何在Swift 3,Swift 4及更高版本中dispatch_sync,dispatch_async,dispatch_after等?

我在Swift 2.x(甚至1.x)项目中有很多代码,如下所示:

// Move to a background thread to do some long running work
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let image = self.loadOrGenerateAnImage()
    // Bounce back to the main thread to update the UI
    dispatch_async(dispatch_get_main_queue()) {
        self.imageView.image = image
    }
}
Run Code Online (Sandbox Code Playgroud)

或者像这样的东西来延迟执行:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
    print("test")
}
Run Code Online (Sandbox Code Playgroud)

或者Grand Central Dispatch API的各种其他用途......

现在我已经在Swift 3的Xcode 8(beta)中打开了我的项目,我得到了各种各样的错误.其中一些提供修复我的代码,但并非所有修复产生工作代码.我该怎么办?

libdispatch grand-central-dispatch dispatch-async swift swift3

230
推荐指数
6
解决办法
18万
查看次数

Swift 3 GCD API更改后的dispatch_once

dispatch_once在语言版本3中进行更改后,Swift中的新语法是什么?旧版本如下.

var token: dispatch_once_t = 0
func test() {
    dispatch_once(&token) {
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是对libdispatch的更改.

grand-central-dispatch swift

77
推荐指数
7
解决办法
4万
查看次数

如何实现swift swift 3.0的方法?

如何在Swift 3.0中实现方法调配?

我已经阅读了关于它的nshipster文章,但是在这个代码的块中

struct Static {
    static var token: dispatch_once_t = 0
}
Run Code Online (Sandbox Code Playgroud)

编译器给我一个错误

dispatch_once_t在Swift中不可用:改为使用延迟初始化的全局变量

xcode swizzling ios swift swift3

37
推荐指数
3
解决办法
2万
查看次数

'dispatch_once_t'在Swift中不可用:改为使用延迟初始化的全局变量

dispatch_once_t在迁移到Swift 3 时遇到了麻烦.

根据Apple的迁移指南:

Swift中不再提供免费函数dispatch_once.在Swift中,您可以使用延迟初始化的全局变量或静态属性,并获得与提供的dispatch_once相同的线程安全性和一次性保证.例:

let myGlobal = { … global contains initialization in a call to a closure … }()

_ = myGlobal // using myGlobal will invoke the initialization code only the first time it is used.

所以我想迁移这段代码.所以它是在迁移之前:

class var sharedInstance: CarsConfigurator
{
    struct Static {
        static var instance: CarsConfigurator?
        static var token: dispatch_once_t = 0
    }

    dispatch_once(&Static.token) {
        Static.instance = CarsConfigurator()
    }

    return Static.instance!
}
Run Code Online (Sandbox Code Playgroud)

迁移后,遵循Apple的指导原则(手动迁移),代码如下所示:

class var sharedInstance: CarsConfigurator
{
    struct Static …
Run Code Online (Sandbox Code Playgroud)

swift swift3

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

如何创建只计算一次的静态计算属性?

我已经创建了一个计算的静态属性,我希望它计算一次,之后无论何时访问都只会返回原始计算值。lazy属性似乎是我想要的,但经过一些搜索后lazy,默认情况下似乎静态属性。

当我运行以下代码时,第一次访问它时/如果我单独运行每个单元测试,它会很好。但是,当我第二次访问它时,我得到了一个空数组。

static var att: [ConferenceNumber] = {
    let list = buildDirectory(for: .att, from: jsonArray)
    return list
}()

private static let jsonArray: [Any]? = {
    let numbersFilePath = Bundle.main.path(forResource: "numbers", ofType:"json")
    let data = try! Data(contentsOf: URL(fileURLWithPath:numbersFilePath!), options: .uncached)

    return try! JSONSerialization.jsonObject(with: data) as? [Any]
}()
Run Code Online (Sandbox Code Playgroud)

第 2 次调用并返回空数组的代码

private static func isAttMeeting(meetingText: String, parsedPhoneNumbers: [String]) -> Bool {
    let attPhoneNumbers = ConferenceNumberDirectory.att.map{$0.number}
    let attNumberWasParsed = parsedPhoneNumbers.intersects(with: attPhoneNumbers)
    if attNumberWasParsed {
        return true
    }
    return meetingText.contains(pattern: …
Run Code Online (Sandbox Code Playgroud)

ios swift

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

swift中的dispatch_once_t替代方案

已经试过这些:

'dispatch_once_t'在Swift中不可用:改为使用延迟初始化的全局变量

Swift 3中的dispatch_once是哪一个?

这是我的代码: 在此输入图像描述

class var sharedInstance:Model{
        struct Static{
            static var instance:Model?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token){
            Static.instance = Model()
        }
        return Static.instance!

    }
Run Code Online (Sandbox Code Playgroud)

请建议我dispatch_once_t的替代方法..我不知道swift,我代码C/C++/Obj.C,请给我快速代码修复上面的问题

swift

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