generic - tuple swift
Do Int y Double comparten una clase para padres comĂșn en Swift (1)
Eche un vistazo al encabezado de Swift:
extension String : StringInterpolationConvertible {
init(stringInterpolationSegment expr: String)
init(stringInterpolationSegment expr: Character)
init(stringInterpolationSegment expr: UnicodeScalar)
init(stringInterpolationSegment expr: Bool)
init(stringInterpolationSegment expr: Float32)
init(stringInterpolationSegment expr: Float64)
init(stringInterpolationSegment expr: UInt8)
init(stringInterpolationSegment expr: Int8)
init(stringInterpolationSegment expr: UInt16)
init(stringInterpolationSegment expr: Int16)
init(stringInterpolationSegment expr: UInt32)
init(stringInterpolationSegment expr: Int32)
init(stringInterpolationSegment expr: UInt64)
init(stringInterpolationSegment expr: Int64)
init(stringInterpolationSegment expr: UInt)
init(stringInterpolationSegment expr: Int)
}
Similar:
func +(lhs: UInt8, rhs: UInt8) -> UInt8
func +(lhs: Int8, rhs: Int8) -> Int8
func +(lhs: UInt16, rhs: UInt16) -> UInt16
func +(lhs: Int16, rhs: Int16) -> Int16
func +(lhs: UInt32, rhs: UInt32) -> UInt32
func +(lhs: Int32, rhs: Int32) -> Int32
func +(lhs: UInt64, rhs: UInt64) -> UInt64
func +(lhs: Int64, rhs: Int64) -> Int64
func +(lhs: UInt, rhs: UInt) -> UInt
func +(lhs: Int, rhs: Int) -> Int
func +(lhs: Float, rhs: Float) -> Float
func +(lhs: Double, rhs: Double) -> Double
func +(lhs: Float80, rhs: Float80) -> Float80
Si fuera posible escribir una función genérica para todos esos diferentes tipos numéricos, seguramente lo habrían hecho. Entonces la respuesta a tu pregunta debe ser No.
(Y en cualquier caso, difícilmente pueden compartir una clase para padres, ya que no son clases . Son estructuras).
Ahora, por supuesto, si solo se cuestionan Int y Double, podría extender Int y Double para adoptar un protocolo común y convertir ese protocolo en el tipo esperado ...
Me pregunto si existe una manera más fácil de escribir estos dos inicializadores como un Inicializador genérico
public required init(_ value : Double) {
super.init(value: value, unitType: unit)
}
public required init(_ value : Int) {
let v = Double(value)
super.init(value: v, unitType: unit)
}
Algo como:
public init<T>(_value : T) {
let v = Double(T)
super.init(value: v, unitType: unit)
}
(que por supuesto no compila)
He revisado el código de Int y Double y me falta algo real que los vincule.