类型的值'字符串'没有会员' characterAtIndex'

时间:2016-06-19 09:23:08

标签: swift nsstring

我使用以下UITextFieldDelegate方法:

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

并在尝试访问第一个字符时收到上面的错误消息:

let firstChar = string.characterAtIndex(0)

我不知道这段代码有什么问题,因为NSString类引用列出了函数:

func characterAtIndex(_ index: Int) -> unichar

你知道我做错了吗?

2 个答案:

答案 0 :(得分:5)

您必须明确桥接(强制转换)StringNSString

(string as NSString).characterAtIndex(0)

答案 1 :(得分:2)

虽然Swift的StringNSString是可以互换的,但您可以将String传递给期待NSString的API,反之亦然,这两者是不一样。通常情况下,如果没有演员,则无法在NSString上调用String方法。

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