Swift将字符转换为字符串

时间:2014-08-03 16:15:51

标签: ios swift

我将字符类型转换为字符串类型时遇到问题。首先,我在String的扩展名下面用于在String中查找第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!)......等 没找到方法。需要帮助。谢谢

4 个答案:

答案 0 :(得分:48)

你的问题很简单:你的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字符是安全的,并且不会初始化可能很大的数组或迭代整个String只是为了得到第三个字符。

答案 1 :(得分:28)

简单怎么样 String(theCharacter)

适用于 Swift 4

答案 2 :(得分:1)

改变这个:

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

到此:

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

所以这里发生了什么:

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

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

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

答案 3 :(得分:0)

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

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