如何转换数组类型?

时间:2016-04-20 13:12:32

标签: swift

如何将定义的let a = [1, 2, 3]转换为Array<CustomStringConvertible>最方便?

类似于a as! [CustomStringConvertible]let b: [CustomStringConvertible] = alet b = Array<CustomStringConvertible>(s: a) ......

2 个答案:

答案 0 :(得分:0)

let a = [1, 2, 3]已经是符合CustomStringConvertible的类型数组,因为a[Int],而Int符合CustomStringConvertible延期:

extension Int : CustomStringConvertible {
    /// A textual representation of `self`.
    public var description: String { get }
}

所以这将始终有效:

let a = [1, 2, 3] as? Array<CustomStringConvertible> // Conditional cast always succeeds 

答案 1 :(得分:0)

一个好问题!

正如我所想,Swift支持ALTER TABLE YOURSCHEMA.YOURTABLE ALTER COLUMN YOURIDENTITYCOL RESTART WITH <new value> 类型的协方差,但似乎只支持类的协方差。例如,这段代码

Array

完美无缺。但是,如果我们将class Animal { } class Cat: Animal { } let cats = [Cat(), Cat()] let animals: [Animal] = cats 更改为class Animal,它就会停止工作并显示错误。

所以,我认为解决方案是

  • 如果两种类型都是类,则使用协方差protocol Animal
  • 如果需要将数组转换为协议数组,请使用let animals: [Animal] = cats