2016-06-19 31 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

相关问题