我有2个协议,JSONStringConvertible
和JSONSerializable
。我希望Int,Int64,UInt32等都符合这些协议。
我写了这段代码
public extension JSONSerializable where Self:Integer, Self:JSONStringConvertible
{
var jsonObject: JSONStringConvertible { return self }
}
public extension JSONStringConvertible where Self:Integer
{
var jsonString: String { return "" }
}
但它不起作用。我必须这样做:
extension Int : JSONStringConvertible, JSONSerializable
{
public var jsonObject: JSONStringConvertible { return self }
public var jsonString: String { return String( self ) }
}
我做错了什么?
答案 0 :(得分:1)
看看你在这里写的内容:
// vvvvvvvvvvvvvvvvvvvv
public extension JSONStringConvertible where Self:UnsignedInteger
扩展名仅适用于无符号整数! Int
是无符号整数吗?没有! Int
是带符号的整数,而UInt
是无符号的。
因此,只需将Unsigned
更改为Signed
,然后在Int
,Int64
,Int32
等处进行扩展,例如
extension Int: JSONStringConvertible, JSONSerializable {}
extension Int32: JSONStringConvertible, JSONSerializable {}
extension Int64: JSONStringConvertible, JSONSerializable {}
此外,您必须在Self:UnsignedInteger
添加其他协议扩展,因此所有协议扩展都将如下所示:
extension JSONSerializable where Self:SignedInteger, Self:JSONStringConvertible
{
var jsonObject: JSONStringConvertible { return self }
}
extension JSONStringConvertible where Self:SignedInteger
{
var jsonString: String { return "" }
}
extension JSONSerializable where Self:UnsignedInteger, Self:JSONStringConvertible
{
var jsonObject: JSONStringConvertible { return self }
}
extension JSONStringConvertible where Self:UnsignedInteger
{
var jsonString: String { return "" }
}