我可以通过对这些协议的扩展将协议一致性添加到 `UnsignedInteger` 中吗?
Can I add protocol conformance to `UnsignedInteger` via extensions on those protocols?
我有 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 ) }
}
我做错了什么?
看看你在这里写了什么:
// 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 "" }
}
我有 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 ) }
}
我做错了什么?
看看你在这里写了什么:
// 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 "" }
}