如何将Swift字符转换为字符串?

时间:2014-07-31 14:43:59

标签: string indexing swift character

我想将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 }

这个答案是否过时,还是这两个不同的东西?

9 个答案:

答案 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])"