检查类中泛型类型是否为特定类型

亚历克斯

假设我们具有以下协议和类:

protocol Numeric { }
extension Float: Numeric {}
extension Double: Numeric {}
extension Int: Numeric {}

class NumericProcessor<T:Numeric> {
    var test:T
    func processString(stringValue: String?)
        if T is Double {
            test = Double(stringValue)
        }
    }
}

我想要的是将String转换为特殊的T:Numeric。

test = T(stringValue)

尽管Double(stringValue),Float(stringValue)可以工作,但将无法工作。

if T is Double {
   test = Double(stringValue)
}

不起作用,因为T is Double无法要求。我如何在通用数值类中解决这个问题?

杰里米

编辑

我是个白痴。您可以向协议添加初始化程序

protocol Numeric
{
    init?(_ s: String)
}

extension Float: Numeric{}

class NumericProcessor<T:Numeric>
{
    var test:T?

    func processString(stringValue: String?)
    {
        test = T(stringValue!)
    }
}

let n = NumericProcessor<Float>()

n.processString("1.5")
print("\(n.test)") // prints "Optional(1.5)"

原来不是很好的答案

您可以将静态函数添加到协议中以进行转换。

protocol Numeric
{
    static func fromString(s: String) -> Self?
}

extension Float: Numeric
{
    static func fromString(s: String) -> Float?
    {
        return Float(s)
    }
}

// Same pattern for Int and Double

class NumericProcessor<T:Numeric>
{
    var test:T?

    func processString(stringValue: String?)
    {
        test = T.fromString(stringValue!)
    }

}

let n = NumericProcessor<Float>()

n.processString("1.5")
print("\(n.test)") // prints "Optional(1.5)"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

来自分类Dev

检查泛型参数类型是否从某个类X派生

来自分类Dev

如何检查Swift泛型类型是否为Void?

来自分类Dev

检查类型是否为Eigen3类型

来自分类Dev

检查对象是否是 Typescript 中的泛型类型

来自分类Dev

泛型类中特定于类型的静态

来自分类Dev

为类类型指定泛型

来自分类Dev

为类类型指定泛型

来自分类Dev

检查类是否是特定泛型的子类

来自分类Dev

检查泛型的类型

来自分类Dev

使用泛型替换特定的类类型

来自分类Dev

检查泛型java中的引用类型

来自分类Dev

如何检查Func <...>类型的变量是否为特定的类方法

来自分类Dev

类中的getConstructors()中的泛型类型

来自分类Dev

强制泛型类型参数为类类型?

来自分类Dev

如何检查某种类型是否符合Scala宏中的泛型类型范围?

来自分类Dev

类声明中的泛型类型

来自分类Dev

java类中的多个泛型类型

来自分类Dev

泛型方法和泛型类中的类型推断

来自分类Dev

将泛型类型属性过滤为特定类型

来自分类Dev

如何在Scala中为泛型类型提供默认类型类?

来自分类Dev

在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

来自分类Dev

在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

来自分类Dev

是否可以根据实现的类型类为泛型定义不同的行为?

来自分类Dev

CPP:定义模板时泛型数据类型T是否为类

来自分类Dev

Scala检查泛型类型

来自分类Dev

从Object,泛型类和通配符未经检查的类型转换

来自分类Dev

如何检查类型是否为类?

来自分类常见问题

检查类是否为通用类型

Related 相关文章

热门标签

归档