Swift将字符转换为字符串

60

我遇到了将字符类型转换为字符串类型的问题。首先,我有一个用于在字符串中找到第n个字符的String扩展。

extension String {
    func characterAtIndex(index: Int) -> Character? {
        var cur = 0
        for char in self {
            if cur == index {
                return char
            }
            cur++
        }
        return nil
    }
}

我使用这个类扩展可以得到我想要的结果。但是当我使用自定义UIButton标题的第n个字符时,会出现错误。我的UIButton类是:

class hareketliHarfler: UIButton {
    init(frame: CGRect) {
        super.init(frame: frame)
        // Initialization code
    }
    func getLetter(letter:String!){
        self.titleLabel.text = letter 
    }
}
当我尝试访问 "getLetter(letter:String)" 函数时,出现了错误。这是主视图控制器代码的示例:

当我尝试访问 "getLetter(letter:String)" 函数时,出现了错误。这是主视图控制器代码的示例:

    var harfim = hareketliHarfler(frame: CGRectMake(100,100,100,100))
var str="This is my String"
var bufi=str.characterAtIndex(3)
    harfim.getLetter(bufi as AnyObject) ****
*部分中,我尝试使用.getLetter(bufi)和.getLetter(bufi as String),同时我也尝试更改函数的参数类型。看起来像这样:func getLetter(letter:Character!)或func getLetter(letter:AnyObject!)......等等。但没找到解决方法。需要帮助。谢谢。

2
иҜ·дёҚиҰҒдҪҝз”Ё"C"зұ»дјјзҡ„жҠҖе·§жқҘз ҙеқҸSwiftдёӯзҡ„Stringе’ҢCharacterзұ»еһӢгҖӮSwiftдёӯжңүеӨ„зҗҶиҝҷдәӣдәӢжғ…зҡ„жӯЈзЎ®ж–№жі•пјҢжҲ‘жҢҮзҡ„жҳҜжүҖжңүUnicodeеӯ—з¬ҰгҖӮ - zaph
当询问错误信息时,发布错误信息的文本真的很有帮助。 - Matt Gibson
4个回答

78

简单地使用String(theCharacter)怎么样?

适用于Swift 4Swift 5


61

你的问题很简单:你的characterAtIndex函数返回一个Character,而self.titleLabel.text是一个String。你无法隐式地在两者之间进行转换。最简单的方法是使用String初始化程序将Character转换为String:

// ch will be Character? type.
if let ch = str.characterAtIndex(3) {
    // Initialise a new String containing the single character 'ch'
    harfim.getLetter(String(ch))
} else {
    // str didn't have a third character.
}

与其他解决方案不同的是,这种方法对于不寻常的Unicode字符是安全的,并且不会初始化一个可能很大的数组或迭代整个字符串来获取第三个字符。

2
改变这个:

var bufi=str.characterAtIndex(3)
harfim.getLetter(bufi as AnyObject)

转换为:

harfim.getLetter(String(Array(str)[3]))

发生了什么:

  1. 我们从字符串创建一个数组。数组元素是原始字符串中的符号。这种方法正确地跟踪表示为两个或更多代码点序列的符号。例如,如@MartinR所指出的表情符号或旗帜。

  2. 我们访问第4个位置的元素。

请注意,由于我们从初始字符串创建了数组,因此在性能方面最好只在短字符串中使用此方法,并避免在频繁重复的例程中使用它。但在您的情况下,似乎可以使用它。


1
自Beta 4版本以来,将字符串转换为数组可以正确处理由多个UTF-16组件组成的UTF字符。 - zaph

0

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