gpt4 book ai didi

swift - 扩展 NSDecimalNumber 以符合 ExpressibleByStringLiteral 会导致 LLDB RPC 服务器崩溃

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

一个 playground 只包含一个 NSDecimalNumber 的扩展,它符合 ExpressibleByStringLiteral 和一个变量 x ,它试图利用该扩展,LLDB RPC 服务器崩溃:

import Cocoa

extension NSDecimalNumber: ExpressibleByStringLiteral {
init(stringLiteral value: Self.StringLiteralType) {
self.init(string: value)
}
}



let x: NSDecimalNumber = "1.2"

  • swift 3
  • Xcode 8.2.1 (8C1002)
  • OS X El Capitan 10.11.6 (15G1421)

在 Apple Radar 和 OpenRadar 上归档:https://openradar.appspot.com/31556528

最佳答案

虽然这是应该报告的编译器错误,但您的扩展在很多层面上都是错误的。

  1. ExpressibleByStringLiteral 有两个父协议(protocol)也必须实现。

  2. 您没有为协议(protocol)关联类型 (StringLiteralType) 声明 typealias

  3. 您不能在协议(protocol)声明之外使用 Self.

  4. 初始化器必须是public

  5. 您只能在扩展中声明便利构造器,而不能声明指定构造器。

  6. 实现初始化器的唯一方法是在类定义中使用 required 初始化器。

总而言之,您不能在扩展中声明符合此协议(protocol)。

为什么这是个坏主意:

  1. NSDecimalNumber 初始值设定项依赖于语言环境。这意味着您的代码行为会根据当前语言环境而改变。

  2. 在 Swift 中,我们应该使用 Decimal 而不是 NSDecimalNumber

关于swift - 扩展 NSDecimalNumber 以符合 ExpressibleByStringLiteral 会导致 LLDB RPC 服务器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350020/

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