我有一些引用字符串,我发布版本中的应用程序只是从一个服务接收并传递给另一个服务。出于调试目的,有必要比较两个引用并将它们打印到控制台。
我的应用程序至少有两种不同类型的参考字符串 - 两者都不会被分配给另一种。
我希望在我的代码中有两个唯一类型,称为ArticleReference和ResultReference。
我首先定义了一个“通用”协议,我可以从中构建ArticleReference和ResultReference。我们在这里处理ArticleReference。
public protocol ReferenceType: Comparable, StringLiteralConvertible {
var value:String {set get}
init(_ value:String)
}
public func + <T :ReferenceType> (lhs:T, rhs:T) -> T {
return T(lhs.value + rhs.value)
}
public func += <T :ReferenceType> (inout lhs:T, rhs:T) -> T {
lhs.value += rhs.value
}
public func == <T :ReferenceType> (lhs:T, rhs:T) -> Bool {
return lhs.value == rhs.value
}
public func < <T :ReferenceType> (lhs:T, rhs:T) -> Bool {
return lhs.value < rhs.value
}
public func > <T :ReferenceType> (lhs:T, rhs:T) -> Bool {
return lhs.value > rhs.value
}
这是参考类型之一。
public struct ArticleReference :ReferenceType {
public var value:String
public init(_ value:String) {
self.value = value
}
}
Xcode 6.4抱怨ArticleReference。
public init(_ value:String) {
错误:初始化程序'init'与协议'StringLiteralConvertible'所需的参数不同('init(stringLiteral :);) 并提议用'stringLiteral
替换'_'如果我接受对'stringLiteral'Xcode的更改,则建议'stringLiteral'替换为'_'!无限错误循环。
我采取了正确的方法吗?如果是这样我哪里出错?
答案 0 :(得分:0)
错误消息可能会产生误导。问题是2
继承自protocol ReferenceType
,但是你
没有为您的StringLiteralConvertible
实施所需的方法。
可能的实施可能是
struct ArticleReference
添加它会使您的代码编译没有错误。
答案 1 :(得分:0)
使用ReferenceType协议在每个结构中需要多个init函数。
public struct ArticleReference:ReferenceType {
public var value:String
public init(_ value:String) {
self.value = value
}
public init(stringLiteral value:String) {
self.value = value
}
public init(extendedGraphemeClusterLiteral value:String) {
self.value = value
}
public init(unicodeScalarLiteral value:String) {
self.value = value
}
}