我想将String
的第一个字母作为String
而不是Character
返回:
func firstLetter() -> String {
return self.title[0]
}
然而,有了上述内容,我得到Character is not convertible to String
。将角色转换为字符串的正确方法是什么?
This answer建议创建一个下标扩展名,但String
的声明已经有了下标方法:
subscript (i: String.Index) -> Character { get }
这个答案是否过时,还是这两个不同的东西?
答案 0 :(得分:25)
为什么不使用字符串插值将字符转换为字符串?
return "\(firstChar)"
答案 1 :(得分:9)
只是第一个角色?怎么样:
var str = "This is a test"
var result = str[str.startIndex..<str.startIndex.successor()] // "T": String
返回一个String(因为你期望使用String的范围下标)并且只要至少有一个字符就可以工作。
这有点短,大概可能会快一点,但在我看来并不是那么清楚:
var result = str[str.startIndex...str.startIndex]
答案 2 :(得分:4)
从 Swift 2.3 / 3.0 + 开始,您可以执行以下操作:
func firstLetter() -> String {
guard let firstChar = self.title.characters.first else {
return "" // If title is nil return empty string
}
return String(firstChar)
}
或者,如果您使用可选字符串“
,则表示正常。”func firstLetter() -> String? {
guard let firstChar = self.title.characters.first else {
return nil
}
return String(firstChar)
}
更新 Swift 4 ,也认为扩展程序更好
extension String{
func firstLetter() -> String {
guard let firstChar = self.first else {
return ""
}
return String(firstChar)
}
答案 3 :(得分:3)
我对同一类型的问题进行了一些研究,我发现这种方法可以从任何字符串中获取任何字符:
func charAsString(str:String, index:Int) -> String {
return String(Array(str)[index])
}
并为您调用的第一个字符
var firstCharAsString = firstLetter("yourString",0)
我不是很擅长编程,但我认为这会做你想做的事情
编辑:
根据您的需要进行简化:
func firstChar(str:String) -> String {
return String(Array(str)[0])
}
我希望这就是你需要的东西
答案 4 :(得分:0)
let str = "My String"
let firstChar = String(str.characters.first!)
答案 5 :(得分:0)
我试图将已解析的String中的单个字符转换为String。
所以我希望B来自helpAnswer的String格式而不是CHARACTER格式,所以我可以在文本框中打印出单个字符。
这非常有效。我不知道它的效率。
但它的确有效。 SWIFT 3.0
谢谢大家的帮助......
var helpAnswer = "ABC"
var String1 = ""
var String2 = ""
var String3 = ""
String1 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 0)]))
String2 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 1)]))
String3 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 1)])
答案 6 :(得分:-1)
这就是我要做的事情:
func firstLetter() -> String {
var x:String = self.title[0]
return x
}
答案 7 :(得分:-1)
首先:您提到的答案仍然相关。它将基于整数的索引添加到String(例如,使用advance())。内置的String下标仅支持BidirectionalIndices(更像是游标而不是数组索引)。这很可能是因为字符串通常不存储在字符串结构中,而是存储为UTF-8或UTF-16。然后对角色的位置访问需要解码(这就是为什么 - 除了额外的复制 - 数组(字符串)[idx]真的很贵)。
如果你真的只想要第一个字符,你可以这样做:
extension String {
var firstCharacterAsString : String {
return self.startIndex == self.endIndex
? ""
: String(self[self.startIndex])
}
}
答案 8 :(得分:-2)
最简单的方法是return "\(self.title[0])"
。