Swift:将Foo <String>转换为Foo <Any>

积家

这是我的代码

class Foo<T> {

}

class Main {
    static func test() {
        var foo: Foo<Any>

        var bar = Foo<String>()
        //Do all my stuff with foo necessitating String

        foo = bar
    }
}

当我尝试分配时foo = bar,出现错误Cannot assign a value of type Foo<String> to a value of type Foo<Any>我不明白为什么会收到此错误,因为String符合Any。如果我使用Array做同样的事情,那么我没有任何错误

static func test() {
        var foo: Array<Any>

        var bar = Array<String>()
        //Do all my stuff with foo necessitating String

        foo = bar
    }

有人知道我的代码有什么问题吗?谢谢

她的

数组和字典是内置了这种行为的特殊类型。但是,这不适用于自定义泛型类型。该类型Foo<Any>不是的超类型(或在这种情况下为超类),Foo<String>即使Any是的超类型String因此,您不能将这些类型的变量相互分配。

根据您的特殊情况,Swift Cast Generics Type中概述的解决方案可能适合您。Foo包装类型的值T,你可以添加一个通用的构造函数的值从一个不同类型的实例转换Foo

class Foo<T> {
    var val: T

    init(val: T) {
        self.val = val
    }

    init<O>(other: Foo<O>) {
        self.val = other.val as! T
    }
}

class Main {
    static func test() {
        var foo: Foo<Any>

        var bar = Foo<String>(val: "abc")
        //Do all my stuff with foo necessitating String

        foo = Foo<Any>(other: bar)
    }
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将IEnumerable <foo>的列表转换为List <string>

(SWIFT)(String,Any)不能转换为String

Swift-将[[String:Any?]]转换为数据

Swift 3.0:将数据转换为JSON [String:Any]

将antlrcpp :: Any转换为std :: string

Java 8将Optional <Object>强制转换为long,int,String或Foo

如何将[String:Any]转换为[NSAttributedStringKey:Any]

将userInfo [AnyHashable:Any]转换为[String:Any]

Swift Combine:如何将`AnyPublisher <[Foo],*>`转换为`AnyPublisher <Foo,*>`?

如何正确地将 _foo 转换为 `Foo` 类型?

将Map <Long,List <Foo >>转换为List <Foo>

打字稿将类型`typeof Foo`转换为`Foo`

无法将类型'Swift.Array <Any>'的值强制转换为'Swift.Dictionary <Swift.String,Any>'

将* [] foo类型的变量转换为* [] bar

将json数据转换为[String:Any]时出错

Scala将WrappedArray或Array [Any]转换为Array [String]

如何将[String:Any]字典转换为double?

如何合并Foo <A> | Foo <B>转换为Foo <A | B>

从NSDictionary转换为[String:Any?]

将[Dictionary <String,Any!>]转换为[Dictionary <String,Any!>]?迅捷3

无法将类型 (Product) -> [String :Any ] 的值转换为指定类型 [ String : Any]

无法将“[[String : Any]]”类型的值转换为预期的参数类型“[String : Any]”

将 any[] 转换为 string[] | 将列表(任何)转换为列表(字符串)

无法将 'Swift.Array<Swift.Dictionary<Swift.String, Swift.String>>' () 类型的值转换为 'Swift.Dictionary<Swift.String, Any>' ()

将 RDD Array[Any] = Array(List([String], ListBuffer([string])) 转换为 RDD(String, Seq[String])

如何在打字稿中将 json 对象转换为 ReadOnlyMap<string, Foo>

Swift:将 Any 或 AnyObject 转换为 JSON

如何转换Dictionary <String,Any> .Values?转换为字符串数组SWIFT

无法将“[String : Any]”类型的值转换为预期的参数类型“String”