相关疑难解决方法(0)

为什么[SomeStruct]不能转换为[Any]?

考虑以下:

struct SomeStruct {}

var foo: Any!
let bar: SomeStruct = SomeStruct()

foo = bar // Compiles as expected

var fooArray: [Any] = []
let barArray: [SomeStruct] = []

fooArray = barArray // Does not compile; Cannot assign value of type '[SomeStruct]' to type '[Any]'
Run Code Online (Sandbox Code Playgroud)

我一直试图找到这背后的逻辑,但没有运气.值得一提的是,如果将结构更改为类,则可以完美地运行.

总是可以添加一个变通方法并映射fooArray的每个对象并将它们转换为Any类型,但这不是问题.我正在寻找一个解释为什么这样做的样子.

有人可以解释一下吗?

这个问题让我想到了这个问题.

arrays swift swift-structs swift2.2

16
推荐指数
1
解决办法
557
查看次数

斯威夫特通用强制误解

我正在使用信号库.

假设我定义了BaseProtocol协议并且ChildClass符合哪种协议BaseProtocol.

protocol BaseProtocol {}
class ChildClass: BaseProtocol {}
Run Code Online (Sandbox Code Playgroud)

现在我想存储信号,如:

var signals: Array<Signal<BaseProtocol>> = []
let signalOfChild = Signal<ChildClass>()
signals.append(signalOfChild)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Swift通用错误

但是我可以编写下一行而没有任何编译器错误:

var arrays = Array<Array<BaseProtocol>>()
let arrayOfChild = Array<ChildClass>()
arrays.append(arrayOfChild)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么,通用Swift数组和通用信号之间的区别是什么?

generics swift

10
推荐指数
1
解决办法
772
查看次数

如何在Swift中的[String:Class <Protocol>]类型的Dictionary中存储Class <ClassImplementingProtocol>类型的值?

我想在类型为[String:SomeClass]的Dictionary中存储一个更专业的类型.下面是一些说明我的问题的示例代码(也可以在https://swiftlang.ng.bluemix.net/#/repl/579756cf9966ba6275fc794a上进行):

class Thing<T> {}

protocol Flavor {}

class Vanilla: Flavor {}

var dict = [String:Thing<Flavor>]()

dict["foo"] = Thing<Vanilla>() 
Run Code Online (Sandbox Code Playgroud)

它会产生错误ERROR at line 9, col 28: cannot assign value of type 'Thing<Vanilla>' to type 'Thing<Any>?'.

我已经尝试过铸造,Thing<Vanilla>() as Thing<Flavor>但这会产生错误cannot convert value of type 'Thing<Vanilla>' to type 'Thing<Flavor>' in coercion.

我也尝试将Dictionary定义为类型,[String:Thing<Any>]但也不会改变任何东西.

如何在Thing不诉诸普通的情况下创建不同s 的集合[String:AnyObject]

我还应该提一下,Thing我没有定义类(实际上它是关于BoltsSwift Task的),因此创建Thing没有类型参数的基类的解决方案不起作用.

generics swift

5
推荐指数
1
解决办法
1593
查看次数

标签 统计

swift ×3

generics ×2

arrays ×1

swift-structs ×1

swift2.2 ×1