我从 API 加载书籍,加载时显示活动指示器,在服务器响应后更新标签。
activityView.isHidden = false
let task = detach {
do {
let books = try await self.bookService.fetchBooks()
DispatchQueue.main.async {
self.show(books: books)
}
} catch {
DispatchQueue.main.async {
self.resultLabel.text = error.localizedDescription
}
}
DispatchQueue.main.async {
self.activityView.isHidden = true
}
}
//...
Run Code Online (Sandbox Code Playgroud)
我的问题是更新主队列上的 UI 的更好方法是什么?DispatchQueue.main.async看起来很丑,我想有更好的方法来做同样的事情。
我必须使用它,因为所有 UI 更新都应该在主线程上,并且我会收到编译器错误,而没有DispatchQueue.main.async类似的内容
与全局参与者“MainActor”隔离的属性“文本”无法从非隔离上下文中发生突变
或者
与全局参与者“MainActor”隔离的属性“isHidden”无法从非隔离上下文中进行突变
PS使用Xcode 13.0b2
我在Swift中安装了Quick和Nimble框架进行测试。但是在测试类中,我的类的类型无法解析。在测试类的顶部,我进行导入:
import UIKit
import Nimble
import Quick
import MyProject
Run Code Online (Sandbox Code Playgroud)
我知道我的主要目标应该是目标依赖项,并且不应添加任何类文件(测试类除外)来编译测试目标的源。
为什么我的文件在测试目标中不可见?
我的视图中有一个圆形头像.我这样做:
self.imageView.layer.cornerRadius = 75;
self.imageView.layer.masksToBounds = YES;
self.imageView.layer.borderWidth = 1;
self.imageView.layer.borderColor = [UIColor whiteColor].CGColor;
Run Code Online (Sandbox Code Playgroud)
但我希望在头像和白色边框之间有透明的2px戒指.我无法在背景上画出白色圆圈,因为化身可以移动并且环位置会丢失.我有想法使用
CGContextSetBlendMode(context, kCGBlendModeClear);
Run Code Online (Sandbox Code Playgroud)
在分配图层后,但我不知道它是如何完成的.感谢您的帮助.
ios ×2
swift ×2
async-await ×1
bdd ×1
objective-c ×1
testing ×1
uiimageview ×1
uikit ×1
xcode13 ×1