我在从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"
为什么会发生这种情况,是否有正确的方法来格式化第二个示例,以便它返回正确的值?
答案 0 :(得分:3)
我在游乐场执行了你的代码,一切都很好。如果你想要包含某些内容的格式化字符串,你可以这样做(从你的例子中):
let int = 1
"SavedKey\(int)"
答案 1 :(得分:3)
我想在此提及一些事项:
"SavedKey\(int)"
可以获得预期的结果,但格式化程序如果使用得当会更强大。例如:
let int = 1
print(int) // will print "1"
print(String(format:"SavedKey%3d", int)) // will print "SavedKey 1\n"
我们在这里所做的是格式化in至少取三个字符,所以不同的值看起来像这样:
添加了:
对于输出%i和%d可能看起来是相同的,因为无论是否为十进制,八进制或十六进制赋值,存储在变量中的值都是相同的:
然而,就意义而言,它是不一样的。如果您正在阅读其中的值,这将发挥作用。 %i会接受十进制,八进制,十六进制值,而%d只接受十进制值。
更好的解释是In this SO Post