UserDefaults返回比请求的更大的整数值

时间:2017-11-03 21:04:42

标签: ios swift xcode

我在从UserDefaults返回整数值时遇到问题。我必须格式化这个不正确,因为它给我不同的值取决于我格式化它,所以如果有一种正确的格式化方式,请告诉我。

int = 1
UserDefaults.standard.set(x, forKey:"SavedKey\(int)")
print(int) // will print "1"
print(String(format:"SavedKey%i", int)) // will print "SavedKey-1065006928"

为什么会发生这种情况,是否有正确的方法来格式化第二个示例,以便它返回正确的值?

2 个答案:

答案 0 :(得分:3)

我在游乐场执行了你的代码,一切都很好。如果你想要包含某些内容的格式化字符串,你可以这样做(从你的例子中):

let int = 1
"SavedKey\(int)"

答案 1 :(得分:3)

我想在此提及一些事项:

  • 您的示例不应该返回您声称的内容。
  • %i不是推荐的整数字符串格式化程序。如果您需要,可以参考以下内容:String Format Specifiers - Apple
  • 虽然"SavedKey\(int)"可以获得预期的结果,但格式化程序如果使用得当会更强大。例如:

let int = 1 print(int) // will print "1" print(String(format:"SavedKey%3d", int)) // will print "SavedKey 1\n"

我们在这里所做的是格式化in至少取三个字符,所以不同的值看起来像这样:

  • 1 - > " SavedKey 1 \ n"
  • 11 - > " SavedKey 11 \ n"
  • 111 - > " SavedKey111 \ n"
  • 1111 - > " SavedKey1111 \ n"

添加了:
对于输出%i和%d可能看起来是相同的,因为无论是否为十进制,八进制或十六进制赋值,存储在变量中的值都是相同的:

然而,就意义而言,它是不一样的。如果您正在阅读其中的值,这将发挥作用。 %i会接受十进制,八进制,十六进制值,而%d只接受十进制值。

更好的解释是In this SO Post