使用格式参数时,Swift 中的字符串初始值设定项问题

Posted

技术标签:

【中文标题】使用格式参数时,Swift 中的字符串初始值设定项问题【英文标题】:Issue with String initializer in Swift when using format parameter 【发布时间】:2021-09-14 19:00:01 【问题描述】:

在我的 XCode 游乐场中,这行 Swift 代码出现错误:

print(String(format: "%.2f", 3.345))

错误读取

对初始化程序的调用没有完全匹配

我相信这意味着我没有使用正确的参数名称/顺序来调用初始化程序。但是,当在 ios 应用程序上运行这行代码时,甚至在在线 Swift 游乐场http://online.swiftplayground.run/ 中运行时,这行代码运行时没有任何问题。

但是,当在 XCode 游乐场或我的终端上通过 Swift REPL 运行它时,它会引发错误。

为什么会这样?

【问题讨论】:

你导入 Foundation 了吗? 啊,好吧,我只是认为这是一个不需要任何导入的内置函数。谢谢! 另外我猜你对 Xcode 环境还很陌生。如果您遇到类似的奇怪错误,您可以从搜索您正在使用的类型开始。不幸的是,文档也不总是直截了当,但它可能会提示您缺少什么。例如,String 的框架被列为“Swift 标准库”,但至少如果你滚动方式.. 向下你可以看到你在通话中是对的。你来自什么语言? 是的,我来自 Web 开发背景,我对 iOS 开发和 Swift 非常陌生。感谢您的建议! 从 Xcode beta 13 开始,你可以说例如3.345.formatted(.number.precision(.fractionLength(2))) 代替,但您仍然需要导入 Foundation。 【参考方案1】:

在使用 String 之前必须先导入 Foundation。 String 是 swift 中的 Foundation 类型。

我在下面的 cmets 中被 Matt 纠正了。 String 内置在 swift 中,而 String(format: 是基础。 我想这就是为什么文档没有这样显示的原因。 谢谢指正。

【讨论】:

这根本不是真的。 String 内置于 Swift 中。没有内置的是 String(format:) 初始化器。 @matt 我很好奇 init 来自 Objective-c,我怎么能在文档中找到它? 它来自基金会。 :)

以上是关于使用格式参数时,Swift 中的字符串初始值设定项问题的主要内容,如果未能解决你的问题,请参考以下文章

'#selector'的参数不是指'@objc'方法,属性或初始值设定项

字符数组的文字字符串初始值设定项

为啥 C# 3.0 对象初始值设定项构造函数括号是可选的?

如何使用 clang 格式控制数组初始值设定项的缩进?

类型初始值设定项引发异常

如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?