gpt4 book ai didi

swift - 是否有与 Swift 的 .description 关联的协议(protocol)?

转载 作者:可可西里 更新时间:2023-11-01 00:56:26 26 4
gpt4 key购买 nike

从 Swift 2(3?)开始,从任何旧对象获取文本输出的“正确方法”是使用 .description。我想在通用函数中使用 .description:

func checkNumeric<T>(_ value: T) -> Bool {
let nf = NumberFormatter()
nf.numberStyle = .decimal
return (nf.number(from:value.description) != nil)
}

但这不起作用,因为 T 不支持 .description(恕我直言,这是一件非常糟糕的事情)。无论如何,有没有办法做到这一点?有 CustomStringConvertible,但没有 StringConvertible,而且我似乎找不到其他类似的东西。

是的,我知道我可以制定自己的协议(protocol)并通过扩展向其中添加类。但是,此函数的重点是避免必须知道并列出可能进入该函数的每个可能的类。

最佳答案

只需断言 T 必须是任何 CustomStringConvertible,这将公开 T 上的 .description 属性。

func checkNumeric<T>(_ value: T) -> Bool 
where T: CustomStringConvertible {
let nf = NumberFormatter()
nf.numberStyle = .decimal
return (nf.number(from:value.description) != nil)
}

如果您正在创建自己的具有描述属性的类,只需确保它们符合 CustomStringConvertible。这样就无需创建您自己的协议(protocol)并扩展每个可能会或可能不会被使用的类。

关于swift - 是否有与 Swift 的 .description 关联的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526118/

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