簡體   English   中英

Swift 將字符轉換為字符串

[英]Swift Converting Character to 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!)...etc 沒有找到方法。 需要幫助。 謝謝

你的問題很簡單:你的 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 來獲取第三個字符。

簡單的String(theCharacter)怎么樣

適用於Swift 4Swift 5

改變這個:

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

對此:

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

那么這里發生了什么:

  1. 我們從我們的字符串創建一個數組。 數組元素是來自原始字符串的符號。 這種分解正確地跟蹤以兩個或更多代碼點的序列呈現的符號。 例如@MartinR 指出的表情符號或標志。

  2. 我們訪問第 4 個位置的元素。

請注意,當我們從初始字符串創建一個數組時,性能方面最好僅將此方法用於短字符串,並避免在經常重復的例程中使用。 但在你的情況下,它似乎沒問題。

如果您想獲得本地化的數字,也可以使用Character(text).isNumber

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM