标签: swift5

如何在Swift 3和4中编写dispatch_after GCD?

在Swift 2中,我能够dispatch_after使用大中央调度来延迟一个动作:

var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
    // your function here 
})
Run Code Online (Sandbox Code Playgroud)

但这似乎不再在Swift 3(或4)中编译.在Swift 3中使用新的Dispatch API编写它的首选方法是什么?

grand-central-dispatch ios swift swift4 swift5

436
推荐指数
6
解决办法
20万
查看次数

UIAlertController的actionSheet在iOS 12.2 / 12.3上给出了约束错误

在iOS 12.2上。使用UIAlertController的actionSheet Xcode时,遇到此问题的人都会遇到约束错误

相同的代码在iOS 12.1上运行,没有错误

我已经在Xcode 10.2和10.1上测试了此代码

class ViewController: UIViewController {

    let Click : UIButton = {
        let button = UIButton(type: UIButton.ButtonType.system)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.setTitle("OK", for: .normal)
        button.tintColor = UIColor.blue
        button.addTarget(self, action: #selector(click(_:)), for: UIControl.Event.touchUpInside)
        return button
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(Click)
        Click.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        Click.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }


    @objc func click(_ sender: UIButton) {
        let optionMenu = UIAlertController(title: nil, message: "Choose Option", preferredStyle: .actionSheet)

        let deleteAction = UIAlertAction(title: "Delete", style: .default)
        let saveAction = …
Run Code Online (Sandbox Code Playgroud)

uialertcontroller swift5

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

“ SimulatorTrampoline.xpc”想要访问麦克风

我最近升级到了Swift 5,Xcode版本10.2(10E125),并且在解决了正在进行的应用程序中的一些编译问题后,看到了这个新的,从未见过的请求。我无法通过直接搜索在我的项目中找到任何证据,也没有在线搜索结果。项目中的吊舱也没有任何回报。

这让我感到担心,想知道是否有人对此有任何信息。

xcode microphone swift5

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

在并发执行的代码中使用对捕获变量的引用

更新2:我怀疑这个问题因为我描述的可能的解决方案而被投票。为了清楚起见,突出显示了它。

更新1:这个问题得到了很多人的关注。如果您认为可以通过您自己遇到错误的情况来增强问题,请在评论中简要描述您的情况,以便我们可以使此问答更有价值。如果您对您的问题版本有解决方案,请将其添加为答案。


Task.detached我想在使用和函数执行异步后台工作后更新 UI async

但是,我在构建过程中收到构建错误错误Reference to captured var 'a' in concurrently-executing code

我尝试了一些方法,在更新 UI 之前将变量转换为 alet constant是唯一有效的方法。为什么我需要先创建一个 let 常量才能更新 UI?还有其他选择吗?

class ViewModel: ObservableObject {
    
    @Published var something: String?
    
    init() {
        Task.detached(priority: .userInitiated) {
            await self.doVariousStuff()
        }
    }
    
    private func doVariousStuff() async {
        var a = "a"
        let b = await doSomeAsyncStuff()
        a.append(b)
        
        something = a /* Not working,
        Gives
           - runtime warning `Publishing changes from 
           background threads is …
Run Code Online (Sandbox Code Playgroud)

async-await swift5 swiftui

41
推荐指数
2
解决办法
4万
查看次数

在 Swift 5.5 中如何等待来自同步函数的异步函数?

当遵守协议或重写超类方法时,您可能无法将方法更改为async,但您可能仍然想调用一些async代码。例如,当我正在重写一个根据 Swift 新的结构化并发编写的程序时,我想async通过class func setUp()覆盖XCTestCase. 我希望我的设置代码在任何测试运行之前完成,因此使用Task.detachedorasync { ... }是不合适的。

最初,我写了一个这样的解决方案:

final class MyTests: XCTestCase {
    override class func setUp() {
        super.setUp()
        unsafeWaitFor {
            try! await doSomeSetup()
        }
    }
}

func unsafeWaitFor(_ f: @escaping () async -> ()) {
    let sema = DispatchSemaphore(value: 0)
    async {
        await f()
        sema.signal()
    }
    sema.wait()
}
Run Code Online (Sandbox Code Playgroud)

这似乎运作良好。然而,在《Swift 并发:幕后花絮》中,运行时工程师 Rokhini Prabhu 指出:

信号量和条件变量等基元与 Swift 并发一起使用是不安全的。这是因为它们隐藏了 Swift 运行时的依赖信息,但在代码的执行中引入了依赖关系……这违反了线程前进的运行时契约。

她还包含了这种不安全代码模式的代码片段

func updateDatabase(_ …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch async-await swift swift5

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

SPM 依赖项的 Xcode 12 IPHONEOS_DEPLOYMENT_TARGET 警告

更新到 Xcode 12 后,我收到了很多关于 SPM 依赖项(包括 RxSwift 和 Facebook)的警告。

iOS Simulator 部署目标“IPHONEOS_DEPLOYMENT_TARGET”设置为 8.0,但支持的部署目标版本范围为 9.0 到 14.0.99。

我可以以某种方式抑制这些警告,还是等待适当框架的创建者修复它的唯一方法?

xcode swift-package-manager swift5 xcode12

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

Swift 5.1 错误:[plugin] AddInstanceForFactory:没有为 id <CFUUID 注册工厂

应用程序崩溃并显示以下错误消息

2019-10-12 20:01:34.332334-0700 Awesome App[26368:3535170] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x600002903280> F8BB1C28-BAE8-11D6-9C31-00039315CD46
Run Code Online (Sandbox Code Playgroud)

崩溃时的断点似乎与 AVAudioPlayer 有关

let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint

Run Code Online (Sandbox Code Playgroud)

swift swift5 swift5.1

29
推荐指数
4
解决办法
3万
查看次数

如何使用异步等待 Swift 5.5 等待 x 秒

如何使用新的 Swift 5.5await关键字来等待一段时间?

DispatchQueue通常,对于完成处理程序,您可以通过使用's得到类似的结果asyncAfter(deadline:execute:)

func someLongTask(completion: @escaping (Int) -> Void) {
    DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
        completion(Int.random(in: 1 ... 6))
    }
}

someLongTask { diceRoll in
    print(diceRoll)
}
Run Code Online (Sandbox Code Playgroud)

在 Swift 5.5 中如何将其转换为使用async& ?await

concurrency swift swift5 swift-concurrency

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

从属性检查器中删除 UIButton 标题“Button”后,未清除它

我从属性检查器中清除了标题,但在运行应用程序时,显示文本“按钮”。 UIButton 属性检查器

输出:

在此输入图像描述

我检查了不同的场景,仅当部署目标低于 15.0 时才会出现此问题

有什么解决办法吗?

Xcode版本:13.0 项目部署目标:13.4

xcode uibutton swift swift5 xcode13

25
推荐指数
2
解决办法
5190
查看次数

是什么决定了 Swift 5.5 任务初始值设定项是否在主线程上运行?

这是我之前的asyncDetached 在 MainActor call 之后回到主线程的后续。

这是 iOS 视图控制器的完整代码:

import UIKit

func test1() {
    print("test1", Thread.isMainThread) // true
    Task {
        print("test1 task", Thread.isMainThread) // false
    }
}
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        test1()
        test2()
    }

    func test2() {
        print("test2", Thread.isMainThread) // true
        Task {
            print("test2 task", Thread.isMainThread) // true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个函数test1test2是相同的,并且是从同一位置调用的。然而,其中一个operation:在后台线程上运行其任务初始值设定项函数,另一个在主线程上运行。

是什么决定了这一点?我只能认为这与声明方法的位置有关。但这与声明方法的位置有什么关系呢?

async-await swift swift5

24
推荐指数
2
解决办法
8599
查看次数