如何使用 appendFormat 格式化 Swift 中的字符串?

How to use appendFormat to format a string in Swift?

我想使用 appendFormat 将字符串附加到 NSMutableString,插入空格以获得我的字符串的最小长度。

在objective-c中,我刚刚使用了

[text.mutableString appendFormat:@"%-12s", "MyString"];

我会得到

"MyString    "

但在 Swift 中,我尝试了

text.mutableString.appendFormat("%-12s", "MyString")

我得到了一切,但不是 "MyString "。出现了一些不知从何而来的乱码

有谁知道为什么会这样,我应该怎么做?

谢谢大家!

    let space: Character = " "
    text = "MyString" + String(count: 12, repeatedValue: space)

尝试:

text.mutableString.appendFormat("%-12@", "MyString")

在Swift中,"MyString"是一个String对象%s 格式说明符导致 appendFormat() 将其参数解释为 C 样式字符串(char 的缓冲区以空值 char 终止)。

在Objective-C中,"MyString"就是这样一个C风格的字符串。您必须在它前面加上 @ 才能获得 NSString 对象 (@"MyString").

根据 Ken 的解释,Swift 字符串对象 等同于 Objective-C C 风格字符串(char) 我找到了 this answer,它展示了如何将 Swift String 对象转换为 Cstring,%-12s 格式在其上可以正常工作。

您可以使用现有的格式字符串,如下所示:

text.mutableString.appendFormat("%-12s", ("MyString" as NSString).UTF8String)

一些示例:

var str = "Test"
str += String(format:"%-12s", "Hello")
// "Test–yç       " (Test, a dash, 11 random characters)

var str2 = "Test"
str2 += String(format:"%-12@", "Hello")
// "TestHello" (no padding)

var str3 = "Test"
str3 += String(format:"%-12s", ("Hello" as NSString).UTF8String)
// "TestHello       " ('Hello' string is padded out to 12 chars)

您应该使用 String 的方法 stringByPaddingToLength() 如下:

let anyString = "MyString"
let padedString = anyString.stringByPaddingToLength(12, withString: " ", startingAtIndex: 0)  // "MyString    "