Self(..)在swift中是如何工作的?



我看到了这段代码,但我不理解语法的作用。我在网上找过了,但是没有找到任何东西。

Q1。它是做什么的?Q2。你要如何找出一个特定的语法是如何工作的?

public extension AppleMusicClient {
static let denied = Self(
musicAuthorizationStatus: .denied,
playSong: { _ in .none },
requestMusicAuthorization: { .none },
searchRequest: { _ in .none }
)
static let noop = Self(
musicAuthorizationStatus: .authorized,
playSong: { _ in .none },
requestMusicAuthorization: { .none },
searchRequest: { _ in .none }
)

简单来说,Self只是当前类型名称的同义词,在本例中为AppleMusicClient。也就是说,相同的静态常量可以定义为

public extension AppleMusicClient {
static let denied = AppleMusicClient(...
static let noop = AppleMusicClient(

那么为什么使用Self,而不是直接使用类型名呢?最好在原始SR中描述:

  • Self的意图更短、更清晰。它镜像self,它指向当前实例。
  • 它提供了一种更简单的方式来访问静态成员。类型名越大,可读性就越差。MyExtremelyLargeTypeName。staticMember的输入和读取都很笨拙。
  • 使用硬连接类型名的代码比自动知道其类型的代码更不容易移植。
  • 重命名类型意味着更新代码中的所有TypeName引用。

参见:更详细的解释。

关于Q2 (">你如何真正去发现一个特定的语法是如何工作的?"): Swift语言参考在那里给你。通常,每次你升级你的Xcode(也会更新Swift版本)时,检查Revision History看看你当前的Swift版本有什么变化是一个好主意。例如,在Swift 5.1的变更日志中提到了Self的变化:

更新了Self Type部分,现在Self可以用来引用当前类、结构体或枚举声明引入的类型。

最新更新