gpt4 book ai didi

swift - 我可以通过对这些协议(protocol)的扩展将协议(protocol)一致性添加到 `UnsignedInteger` 吗?

转载 作者:行者123 更新时间:2023-11-28 15:38:27 25 4
gpt4 key购买 nike

我有 2 个协议(protocol),JSONStringConvertibleJSONSerializable。我希望 Int、Int64、UInt32 等都符合这些协议(protocol)。

这段代码是我写的

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,然后对 IntInt64Int32 进行扩展 等,例如

extension Int: JSONStringConvertible, JSONSerializable {}
extension Int32: JSONStringConvertible, JSONSerializable {}
extension Int64: JSONStringConvertible, JSONSerializable {}

此外,您还必须在 Self:UnsignedInteger 中添加其他协议(protocol)扩展,因此您的所有协议(protocol)扩展都将如下所示:

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 "" }
}

关于swift - 我可以通过对这些协议(protocol)的扩展将协议(protocol)一致性添加到 `UnsignedInteger` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44039885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com