gpt4 book ai didi

ios - Swift:将 Foo 转换为 Foo

转载 作者:搜寻专家 更新时间:2023-10-31 08:33:39 25 4
gpt4 key购买 nike

这是我的代码

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。如果我做完全相同的事情但使用数组,我不会有任何错误

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> 的父类(super class)型(或本例中的父类(super class))尽管AnyString 的父类(super class)型.因此,您不能将这些类型的变量相互赋值。

根据您的具体情况,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)
}
}

关于ios - Swift:将 Foo<String> 转换为 Foo<Any>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31923052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com