Swift 将字符转换为字符串

Posted

技术标签:

【中文标题】Swift 将字符转换为字符串【英文标题】:Swift Converting Character to String 【发布时间】:2014-08-03 16:15:50 【问题描述】:

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

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

我得到了我想要的这个类扩展。但是,当我使用第 n 个字符作为自定义 UIButton 的标题时,会出现错误。我的 Uibutton 类是

class hareketliHarfler: UIButton 
    init(frame: CGRect) 
        super.init(frame: frame)
        // Initialization code
    
    func getLetter(letter:String!)
        self.titleLabel.text = letter 
    

当我尝试访问“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!)...等 没找到办法。需要帮助。谢谢

【问题讨论】:

请不要用“C”之类的技巧颠覆 Swift StringCharacter 类型。 Swift 中有一些方法可以正确处理这些事情,我指的是所有 unicode 字符。 在询问错误消息时,发布错误消息的文本非常有帮助。 【参考方案1】:

简单的怎么样 String(theCharacter)

适用于 Swift 4Swift 5

【讨论】:

【参考方案2】:

您的问题很简单:您的 characterAtIndex 函数返回一个字符,而 self.titleLabel.text 是一个字符串。您不能在两者之间隐式转换。最简单的方法是使用 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 字符是安全的,并且不会初始化一个可能很大的数组或迭代整个字符串以获取第三个字符。

【讨论】:

【参考方案3】:

改变这个:

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

到这里:

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

那么这里发生了什么:

    我们从我们的字符串创建一个数组。数组元素是来自原始字符串的符号。这种分解正确地跟踪以两个或多个代码点的序列呈现的符号。例如。 @MartinR 指出的表情符号或标志。

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

请注意,当我们从初始字符串创建一个数组时,性能方面最好只对短字符串使用此方法,并避免在经常重复的例程中使用它。但在你的情况下,它似乎没问题。

【讨论】:

因为至少 Beta 4 将字符串转换为数组可以正确处理由多个 utf-16 组件组成的 utf 字符。【参考方案4】:

如果您想获取本地化号码,也可以使用Character(text).isNumber

参考: https://developer.apple.com/documentation/swift/character/3127015-isnumber

【讨论】:

以上是关于Swift 将字符转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

Swift - NSJsonSerialization - “无法将数据转换为围绕字符的字符串”错误

Swift3 将字符串值转换为十六进制字符串

Swift将十六进制字符串或字符转换为整数

SWIFT - 将字符串转换为 UIKit 元素

Swift将字符串日期转换为日期

为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?