swift拾遗(一)

90 阅读2分钟

image.png

上述 Swift 代码定义了一个名为 Repository 的结构体,该结构体遵循 Decodable 协议,主要用于对从外部数据源(如 JSON 数据)解码而来的数据进行建模。

在 Swift 中,struct 是一种用于创建自定义数据类型的语法结构。结构体是值类型,这意味着当你将一个结构体实例赋值给另一个变量或常量,或者将其作为参数传递给函数时,传递的是该结构体的一个副本,而不是引用。 跟OC的 NSObject 还不同

Decodable 是 Swift 标准库中的一个协议,它用于定义一个类型可以从外部表示(如 JSON、XML 等)解码数据。当一个类型遵循 Decodable 协议时,它需要提供一种方式来将外部数据转换为该类型的实例。在 Swift 中,如果结构体的所有属性都遵循 Decodable 协议,编译器可以自动合成 Decodable 所需的实现,这被称为 “自动合成”,json 转 model ,遵循 decodable就能实现 OC MJExtent 或者 YYModel的作用,确实挺方便的

image.png

repository.description .map(Text.init)? .lineLimit(nil)
这段代码的主要目的是根据 `Repository` 实例的 `description` 属性创建一个 `Text` 视图,并且设置这个 `Text` 视图不限制显示的行数。如果 `description` 属性为 `nil`,则不会创建 `Text` 视图。

1. .map(Text.init)

  • map 是 Swift 中用于可选类型(Optional)的一个方法。当你在一个可选值上调用 map 方法时,它会检查该可选值是否包含一个值。

    • 如果可选值包含一个值,map 会将该值传递给传入的闭包(这里是 Text.init),并返回闭包的返回值。在 SwiftUI 里,Text.init 是 Text 视图的初始化方法,它接受一个字符串作为参数并返回一个 Text 视图。

    • 如果可选值为 nilmap 会直接返回 nil

所以,.map(Text.init) 这一步的作用是,如果 repository.description 包含一个字符串,就用这个字符串创建一个 Text 视图;如果 repository.description 为 nil,则返回 nil

2. ?

这是可选链操作符。由于 .map(Text.init) 可能返回 nil(当 repository.description 为 nil 时),使用可选链操作符可以确保后续的方法调用(这里是 lineLimit(nil))只会在前面的表达式返回一个非 nil 值时执行。如果前面的表达式返回 nil,则整个表达式的值也为 nil,不会执行后续的方法调用。

image.png

  • Combine:苹果推出的响应式编程框架,用于处理异步事件和数据流。
  • Foundation:提供了基本的数据类型、文件系统操作、网络请求等功能。
  • SwiftUI:用于构建用户界面的声明式框架。
final class RepositoryListViewModel: ObservableObject {
  • final:表示该类不能被继承。
  • ObservableObject:遵循此协议的类可以被 SwiftUI 视图观察,当类中的属性发生变化时,视图会自动更新。