字符串可能不会被' Int'编入索引。 Swift3

时间:2017-05-30 08:47:01

标签: swift string

我试图以大写字母显示联系人姓名的第一个字母:

 var firstLetter: String? = !(contact?.firstName == "") ? (contact?.firstName as? String)?.substring(to: 1).uppercased() : (contact?.lastName as? String)?.substring(to: 1).uppercased()

但我有这个错误:

String may not be indexed with 'Int', it has variable size elements

5 个答案:

答案 0 :(得分:0)

尝试此功能以获得大写格式的第一个字母。在通话之前检查您的字符串是否为空,然后不要像在代码中那样进行调用

func capitalizeFirst() -> String {
        let firstIndex = self.index(startIndex, offsetBy: 1)
        return self.substring(to: firstIndex).capitalized + self.substring(from: firstIndex).lowercased()
    }

答案 1 :(得分:0)

如果您只需要找到第一个字符,则可以使用contact?.uppercased().characters.first。 通常,要使用大写字母获取第n个字符,请使用contact?.uppercased()[contact?.index(contact?.startIndex, offsetBy: n)]

答案 2 :(得分:0)

试试这个:

    if let contact = contact
    {
        var firstLetter = !contact.firstName.isEmpty ? contact?.firstName.characters.first?.description.uppercased() : contact?.lastName.characters.first?.description.uppercased()
    }

如果您告诉"联系"的类型/定义,我将能够为您提供更多帮助。

答案 3 :(得分:0)

为了避免长链的间接性并使函数更清晰,你也可以这样写:

firstLetter = ( (contact?.firstName ?? "") + (contact?.lastName ?? "") )
              .characters.first?.description.uppercased()

答案 4 :(得分:0)

var firstLetter = (contact?.firstName.characters.first ?? contact?.lastName.characters.first)?.description.uppercased()