如何在Swift中将一个字符添加到字符串中?

36

这个在 Xcode 6: Beta 5 上能正常工作,但是在 Beta 6 中编译时会出现错误。

for aCharacter: Character in aString {
    var str: String = ""
    var newStr: String = str.append(aCharacter) // ERROR
    ...
}

错误: 无法使用类型为Character的参数调用append


是的,那就是我最初使用的语法,但报错显示:“cannot invoke '+' with an argument list of type '(Character, @lvalue String)'” - samatron
append 返回 Void 并且只会改变字符串本身。 - Qbyte
9个回答

45

针对不断变化的Swift技术,更新如下:

Swift不再有一个可以接收字符串和字符数组的+运算符。(可以使用字符串方法appendContentsOf()来达到这个目的)。

现在做这件事的最好方式是马丁R在下面评论中提供的答案:

var newStr:String = str + String(aCharacter)

原始回答:这在 Beta 6 中有所改变。请查看发布说明。我仍在下载中,但尝试使用:

var newStr:String = str + [aCharacter]

谢谢,那个有效。我猜我应该推断出字符数组就是字符串?Beta 6的发布说明中没有提到这个特定的语法。 - samatron
1
它本可以更清晰,但确实说了“您仍然可以将两个字符或字符串与任何其他字符序列或数组与相同元素类型的任何其他序列相加”。基于此,我决定使用[]语法将字符转换为数组。 - Gary Makin
8
var newStr:String = str + String(aCharacter)同样有效。 - Martin R
以上答案返回'String'不等于'Uint8'。我猜最新的官方版本与Gary使用的beta版本不同。因此,正确的答案似乎是Martin R的答案。 - qwerty_so
我不确定你在做什么以获得“'String'不等于'Uint8'”的错误,但我同意Martin的答案在更多情况下是正确的。 - Gary Makin

11

这也可以工作

var newStr:String = str + String(aCharacter)

1
...我会说这是更快的方法。 - Grimxn

9

append(c: Character) 是正确的方法,但您的代码存在两个问题。

第一个问题是,要迭代字符串的字符,必须访问 String.characters 属性。

第二个问题是,append 方法不返回任何内容,因此应删除 newStr。

代码如下:

for aCharacter : Character in aString.characters {
    var str:String = ""
    str.append(aCharacter)
    // ... do other stuff
}

只需像 OP 一样设置一个循环即可。添加“做其他事情”的注释。 - Mike Vosseller

6
另一个可能的选择是:
var s: String = ""
var c: Character = "c"
s += "\(c)"

2
根据Swift 4文档,您可以使用String类型的append()方法将Character值附加到String变量中:
var welcome = "hello there"

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome now equals "hello there!"

1
var stringName: String = "samontro"
var characterNameLast: Character = "n"
stringName += String(characterNameLast) // You get your name "samontron"

0
我需要从名字的姓和名中获取缩写,并将它们拼接在一起。参考上面答案的一些片段,我的代码如下:
  var initial: String = ""

            if !givenName.isEmpty {
                let char = (givenName as NSString).substring(with: NSMakeRange(0, 1))
               let str = String(char)
                initial.append(str)
            }

            if !familyName.isEmpty {
                 let char = (familyName as NSString).substring(with: NSMakeRange(0, 1))
                let str = String(char)
                initial.append(str)
            }

0

对于那些寻找 Swift 5 的人,你可以使用插值。

var content = "some random string"
content = "\(content)!!"
print(content) // Output: some random string!!

-1
 let original:String = "Hello"
 var firstCha = original[original.startIndex...original.startIndex]

 var str = "123456789"
 let x = (str as NSString).substringWithRange(NSMakeRange(0, 4))

 var appendString1 = "\(firstCha)\(x)" as String!
 // final name
 var namestr = "yogesh"
 var appendString2 = "\(namestr) (\(appendString1))" as String!*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接