【问题标题】:What does "<T: Decodable>" mean in method on XCODE?XCODE 方法中的“<T: Decodable>”是什么意思?
【发布时间】:2022-06-16 12:41:18
【问题描述】:
func decode<T: Decodable>(filename: String, as type: T.Type) -> T {
    guard let url = self.url(forResource: filename, withExtension: nil) else {
      fatalError("번들에 \(filename)이 없습니다.")
    }
    guard let data = try? Data(contentsOf: url) else {
      fatalError("\(url)로부터 데이터를 불러올 수 없습니다.")
    }
    guard let decodedData = try? JSONDecoder().decode(T.self, from: data) else {
      fatalError("데이터 복호화에 실패했습니다.")
    }
    return decodedData
  }

在这段代码中,'' 在方法中是什么意思? 我猜参数 T 工作协议,不是吗? 如果你有解释这个 swift 语法的 URL,请告诉我...:)

【问题讨论】:

    标签: xcode


    【解决方案1】:

    简短回答:它是一个带有类型参数的通用函数


    详细说明

    在 Swift 中,我们可以创建一个可用于任何类型数据的函数。这样的函数称为泛型函数。

    以下是我们如何在 Swift 中创建泛型函数:

    // create a generic function
    func displayData<T>(data: T){
      ...
    }
    

    这里,

    我们创建了一个名为 displayData() 的通用函数。

    在尖括号&lt;&gt;中使用的T称为类型参数

    并根据传递给函数的值的类型,将 T 替换为该数据类型(Int、String 等)。

    例如,如果我们使用以下方式调用此函数:

    // Code 1
    // generic function working with String
    displayData(data: "Swift")
    
    // Code 2
    // generic function working with Int
    displayData(data: 5)
    

    我们在代码 1 中看到我们传递了一个字符串值,所以占位符参数 T 会自动替换为 String。

    同样,在代码 2 中,当我们将 Int 传递给泛型函数时,占位符被 Int 替换。

    现在来看看你的情况 &lt;T: Decodable&gt; 被称为 Swift 泛型中的类型约束

    一般来说,类型参数可以接受任何数据类型(Int、String、Double、...)。

    但是,如果我们只想对某些特定类型使用泛型(例如接受 Decodable 类型的数据),那么我们可以使用类型约束。

    所以 只接受符合Decodable 协议的参数。在您的函数中,它接受 filename 这是 String 类型,这确认了 Decodable 协议。假设将String 替换为不符合Decodable 协议的类型,则此函数将不起作用并引发错误。

    要了解所有类型对 Decodable 协议的确认,请阅读

    https://developer.apple.com/documentation/swift/decodable

    在关系部分下 -> 由主题继承。

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多