https://www.hackingwithswift.com/example-code/language/how-to-use-available-to-deprecate-old-apis
// Proposal 1
class MyClass {
prepareVideo {
self.movePlayhead(to: self.video.lastPlayheadPosition)
self.startPlaybackIfNeeded()
}
}
// Proposal 2
class MyClass {
prepareVideo { [self] in
movePlayhead(to: video.lastPlayheadPosition)
startPlaybackIfNeeded()
}
}- SwiftUI View 内部的属性只能通过在 View 内部修改的方式更新 UI
struct MyView: View {
@State var text: String = ""
var body: some View {
Text(text)
.onTapGesture {
// 可以更新
self.text = "Tapping..."
}
}
}
struct XXApp: App {
var body: some Scene {
WindowGroup <MyView> {
let view = MyView()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
// 无法更新
view.text = "Update text"
}
return view
}
}
}如果需要实现在外部修改 SwiftUI View 的元素,需要创建一个 ObservedObject,将其某个属性设置为 Published,再修改这个属性
struct MyView: View {
@ObservedObject var viewModel: MyViewModel
var body: some View {
Text(viewModel.text)
}
}
class MyViewModel: ObservableObject {
@Published var text: String = ""
}
struct XXApp: App {
var viewModel: MyViewModel = .init()
var body: some Scene {
WindowGroup <MyView> {
let view = MyView(viewModel: viewModel)
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
// 可以更新
viewModel.text = "Update text"
}
return view
}
}
- 主要流程:https://www.jianshu.com/p/db55bd5f5aeb
- 完善放置流程:https://medium.com/hackernoon/how-to-drag-drop-uicollectionview-cells-by-utilizing-dropdelegate-and-dragdelegate-6e3512327202
- UIDragSession 判断拖拽位置:https://www.jianshu.com/p/2cd8e4a6aa57
@discardableResult in Swift explained: Ignoring return values
| 时间 | 内容 |
|---|---|
| 20200823 | 新增SwiftUI 中的叠放、网格和大纲(WWDC2020) |
| 20220822 | 新增SwiftUI 新功能(WWDC 2020) |
| 20220816 | 新增自定义 Operation 实例 |
| 20220714 | 新增Swift协议 |
| 20220706 | 新增SwiftUI的FixedSize |
| 20220530 | 新增SwiftUI无法预览 |
| 20220329 | 新增SPM加速 |
| 20220223 | 新增SSH连接Git超时 |
| 20210905 | 新增Swift自定义命名空间 |
| 20210818 | 新增UIView |
| 20210818 | 新增App启动速度优化(占位) |
| 20210818 | 新增Bug和修复方法 |
| 20210818 | 新增备忘录 |