0
我有以下代码,我定义了一个Loggable
协议,我想在我的应用程序中Element
类型符合Loggable
易于转换为字符串的任何Array
。扩展阵列友好的自定义日志
//: Playground - noun: a place where people can play
import UIKit
protocol Loggable {
var logDescription: String { get }
}
struct Node: CustomStringConvertible {
let id: Int
var description: String {
return "node: \(self.id) \n"
}
}
let node1 = Node(id: 1)
let node2 = Node(id: 2)
let nodes = [node1, node2]
print(nodes)
extension Array: Loggable where Element: Loggable {
var logDescription: String {
var message = ""
for element in self {
message += element.logDescription
}
return message
}
}
struct Logger {
static func log(item: Loggable) {
print(item.logDescription)
}
}
Logger.log(item: nodes)
不幸的是,我得到Extension of type 'Array' with constraints cannot have an inheritance clause
。有没有办法完成我想要做的事情?
更广泛地说,我会很感激任何建议或链接使用Swift功能来实现更清晰的日志消息。
有点相关,是否有可能使协议符合其他协议?例如,你让'Node'符合协议,但是说'Node'是一个协议。假设我希望所有'节点'符合'Hashable',那可能吗? –
和Logger.log应该采用通用约束为Loggable而不是Loggable的具体原因是什么?在这两种情况下,参数的行为都不是'Loggable'? –