Skip to content

PatShen/iOS-notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iOS-notes

Tiny Tips

How to use @available to deprecate old APIs

https://www.hackingwithswift.com/example-code/language/how-to-use-available-to-deprecate-old-apis

在闭包中强引用 self 的两种方法

// 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 元素刷新

  • 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
    }
  }

UICollectionView drag and drop

@discardableResult

@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 新增备忘录

About

学习/工作过程中遇到的知识点记录

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published