swift - 通用方法覆盖不能快速工作

标签 swift generics swift2

有来自第 3 方的协议(protocol) Printable 和结构打印机。

protocol Printable {}

struct Printer {

    static func print<T>(object: T) -> String {
        return "T"
    }

    static func print<T: Printable>(object: T) -> String {
        return "Printable"
    }

}

现在我正在做一个通用的

struct Generic<T> {

    var args: T

    func display() {
        print(Printer.print(args))
    }

}

和两个结构

struct Obj {}
struct PrintableObj: Printable {}
var obj = Generic(args: Obj())
var printableObj = Generic(args: PrintableObj())

当我在它们两个上调用显示函数时。

obj.display()

显示 T

printableObj.display()

显示 T 但我希望它打印"Printable"

我能想到的一个解决方案是使用两种不同的泛型

struct Generic<T>
struct PrintableGeneric<T: Printable>

在不改变 Printable 协议(protocol)和 Printer 结构的情况下,是否还有其他解决方案。

最佳答案

static func print<T>(object: T) -> String {
    if object is Printable {
        return "Printable"
    } else {
        return "T"
    }
}

关于swift - 通用方法覆盖不能快速工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35431712/

相关文章:

ios - 迁移到 Swift 2 时出错 : Invalid conversion from throwing function of type to non-throwing function type and use of undeclared type

java - 当我知道 ParametrizedType/TypeVariable 所在类的 ParametrizedType 时,如何解析它?

swift - 什么时候执行 Swift 闭包?

ios - swift 中的 Firebase 查询排序顺序?

ios - swift 2.0 - UITextFieldDelegate 协议(protocol)扩展不工作

ios - Eureka Forms Library 响应一行的文本字段完成编辑?

c# - 在 C# 中使用类型对象作为泛型的类型参数

java - 恢复丢失的类型同时避免 'unchecked cast' 警告

ios - iOS 中的 RealmSwift 出现 'write' block 问题

swift - 在 Swift 中访问 "level"范围以获得更有意义的调试字符串