gpt4 book ai didi

swift - 先决条件失败 : Negative count not allowed

转载 作者:搜寻专家 更新时间:2023-11-01 05:33:18 24 4
gpt4 key购买 nike

错误:

前提条件失败:不允许负计数:文件/BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.74.1/src/swift/stdlib/public/core/StringLegacy。 swift,第 49 行

代码:

字符串(重复:“a”,计数:-1)

思考:

嗯,将某个字符串重复负数次是没有意义的。既然我们在 Swift 中有类型,为什么不使用 UInt

这里我们有一些关于它的文档。

Use UInt only when you specifically need an unsigned integer type with the same size as the platform’s native word size. If this isn’t the case, Int is preferred, even when the values to be stored are known to be nonnegative. A consistent use of Int for integer values aids code interoperability, avoids the need to convert between different number types, and matches integer type inference, as described in Type Safety and Type Inference.

Apple Docs

好的,Int 是首选,因此 API 只是遵循规则,但为什么 Strings API 是这样设计的?为什么这个构造函数不是私有(private)的,而是带有 UInt ro 之类的公共(public)构造函数?有“真实”的原因吗?这是某种“未定义行为”之类的事情吗?

还有:https://forums.developer.apple.com/thread/98594

最佳答案

这不是未定义的行为——事实上,先决条件表示完全相反:进行了显式检查以确保给定的 count 为正数。

至于为什么参数是 Int 而不是 UInt — 这是 Swift 设计早期做出的两个决定的结果:

  1. 与 C 和 Objective-C 不同,Swift 不允许在整数类型之间进行隐式(甚至显式)转换。您不能将 Int 传递给采用 UInt 的函数,反之亦然,以下转换也不会成功:myInt as? UInt。 Swift 首选的转换方法是使用初始化器:UInt(myInt)
  2. 由于 IntUInt 更普遍适用,因此它们将是首选的整数类型

因此,由于在 IntUInt 之间进行转换可能既麻烦又冗长,因此在最大数量的 API 之间进行互操作的最简单方法是将它们全部编写就常见的整数货币类型而言:Int。正如您引用的文档所提到的,这“有助于代码互操作性,避免了在不同数字类型之间进行转换的需要,并匹配整数类型推断”;在运行时捕获无效输入是此决定的权衡。

事实上,Int 在 Swift 中根深蒂固,以至于当 Apple 框架接口(interface)从 Objective-C 导入 Swift 时,NSUInteger 参数和返回类型被转换为 Int 而不是 UInt,以显着简化互操作性。

关于swift - 先决条件失败 : Negative count not allowed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311881/

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