[英]Issue with converting NSString * to String and passing Character as parameter in Swift iOS
[英]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 4和Swift 5
改變這個:
var bufi=str.characterAtIndex(3)
harfim.getLetter(bufi as AnyObject)
對此:
harfim.getLetter(String(Array(str)[3]))
那么這里發生了什么:
我們從我們的字符串創建一個數組。 數組元素是來自原始字符串的符號。 這種分解正確地跟蹤以兩個或更多代碼點的序列呈現的符號。 例如@MartinR 指出的表情符號或標志。
我們訪問第 4 個位置的元素。
請注意,當我們從初始字符串創建一個數組時,性能方面最好僅將此方法用於短字符串,並避免在經常重復的例程中使用。 但在你的情況下,它似乎沒問題。
如果您想獲得本地化的數字,也可以使用Character(text).isNumber
。
參考: https : //developer.apple.com/documentation/swift/character/3127015-isnumber
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.