2016-06-19 35 views
4

我使用以下方法UITextFieldDelegate:值類型「字符串」的不具有成員「characterAtIndex」

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, 
replacementString string: String) -> Bool { 

和得到的錯誤消息試圖訪問的第一個字符上面時:

let firstChar = string.characterAtIndex(0) 

我不知道有什麼不對的代碼,因爲NSString類引用列出的功能:

func characterAtIndex(_ index: Int) -> unichar 

你知道我在做什麼錯嗎?

回答

4

你必須明確地橋(CAST)StringNSString

(string as NSString).characterAtIndex(0) 
+0

謝謝您的快速響應! – blueball

2

雖然斯威夫特的StringNSString是可以互換的,因爲你可以通過String到API的期待NSString,反之亦然意義上說,兩者是不一樣。一般來說,您不能在String上調用NSString方法而無需演員。

String獲得初始字符的方式是不同的 - 而不是使用characterAtIndex(0)你叫

let str = "Hello" 
let initialChar = str[str.startIndex] // will throw when str is empty 

let initialChar = str.characters.first // produces an optional value 
+0

可能值得一提的是,上面得到的是Swift原生類型'Character'(unicode擴展字形串),而OP:s .characterAtIndex(_ :)產生'unichar'(UTF-16代碼單元)。兩種類型不是可以交換的(我懷疑OP是否真的需要'unichar',儘管:)。另外,考慮使用比str [str.startIndex]更安全的替代方法(< - 空字符串的運行時異常),例如帶可選綁定的'str.characters.first'。 – dfri

+1

@dfri感謝您的評論! – dasblinkenlight

相關問題