首页 > 解决方案 > 返回不透明类型的数组

问题描述

可以退货some [T]吗?

protocol P {
    associatedtype X
    func method() -> [X]
}

class Imp: P {
    typealias X = Int

    func method() -> some [Int] {
        return [1]
    }
}

上面的代码产生错误“‘不透明’类型必须仅指定‘Any’、‘AnyObject’、协议和/或基类”

编辑: 图表 所以协议隐藏底层@NSMangedObject并只公开需要的属性。如果A、B有Comparable能力就好了。

标签: arraysswiftopaque-result-type

解决方案


这是不可能的,但那是因为它没有任何意义。some T表示“符合 T 的特定具体类型,在编译时由返回函数知道,但调用者不知道。” [Int]是调用者已知的类型。它没有什么“不透明”的。这等同于:

func method() -> [Int] { ... }

推荐阅读