【问题标题】:Applying Generics to Variables and Functions - Swift将泛型应用于变量和函数 - Swift
【发布时间】:2015-01-26 23:01:29
【问题描述】:

我正在尝试快速使用泛型来初始化我的 Vector3D 类中的变量。但是,在将协议“数字”分配给我的变量(使其成为 Double 或 Float)时,我收到以下错误:

协议“编号”只能用作通用约束,因为它 有 Self 或关联的类型要求

public protocol Number {
    func +(l: Self, r: Self) -> Self
}    
extension Double : Number {}
extension Float  : Number {}


class Vector3D: NSObject {

    var xCord: Number
    var yCord: Number
    var zCord: Number


    func Vector3D(x: [Number], y: [Number], z: [Number]) {
        self.xCord = x
        self.yCord = y
        self.zCord = z
    }
}

我的问题是,如何将泛型应用于 swift 和函数中的变量?

【问题讨论】:

    标签: ios generics swift protocols nsobject


    【解决方案1】:

    你不能像 in this answer 那样在 Swift 中为变量添加泛型,但是你可以像这样向函数添加泛型:

    func swapTwoValues<T>(inout a:T, inout b:T){
      let temporaryA = a
      a = b
      b = temporaryA
    }
    

    Check the apple Documentation.

    【讨论】:

      【解决方案2】:

      泛型在这里创建&lt;T&gt;。它就像类型的变量。您可以将 T 更改为您想要的任何内容,只要它不用作某处的类型即可。约束位是: Number。它将 T 的类型限制为遵循数字协议的类型。

      func Vector3D<T: Number>(x: [T], y: [T], z: [T]) {
          self.xCord = x
          self.yCord = y
          self.zCord = z
      }
      

      如另一个答案所述,变量和常量不能是通用类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 1970-01-01
        • 2018-02-25
        相关资源
        最近更新 更多