2017-05-30 1 views
1

ich versuche, die ersten Buchstaben meines Kontaktnamen in Großbuchstaben angezeigt werden:String kann nicht mit ‚Int‘ swift3 indiziert wird

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

, aber ich habe diesen Fehler habe:

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

'String' von' String.Index' indiziert ist, nicht 'Int ', vergleiche [Wie funktioniert String.Index in Swift 3] (https://stackoverflow.com/q/39676939/2976878). In Ihrem Fall können Sie 'string.characters.first' verwenden, das Ihnen das erste Zeichen der Zeichenfolge gibt, oder' nil', wenn die Zeichenfolge leer ist - vergleichen Sie [Wie erhält man den ersten Buchstaben aller Zeichenfolgen in einem Array? in iOS Swift?] (https://stackoverflow.com/q/33792991/2976878). – Hamish

+0

Welcher Kontakttyp ist hier? Können Sie die Definition des Typs "Kontakt" anzeigen? – PGDev

Antwort

0

Versuchen verwenden:

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

Ich kann Ihnen mehr helfen, wenn Sie die Art/Definition von „Kontakt“ sagen.

+0

voici la deklaration de kontakt: var kontakt: TContact? = TContactsManager.shared(). GetContactByJID (self.bareJid! .full()) – khouloud

+0

Definition von TContact? – PGDev

+0

Es ist eine Klasse, die Kontaktinformationen enthält – khouloud

0

Probieren Sie diese Funktion aus, um den ersten Buchstaben im Großbuchstabenformat zu erhalten. Vor dem Aufruf zu überprüfen, ob die Zeichenfolge dann rufen Sie nicht leer ist, wie Sie in Ihrem Code

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

tun Wenn Sie nur das erste Zeichen zu finden, dann können Sie contact?.uppercased().characters.first verwenden. Im Allgemeinen ist die n-te Zeichen in Großbuchstaben zu erhalten, diese contact?.uppercased()[contact?.index(contact?.startIndex, offsetBy: n)]

0

Um die lange Kette von Indirekt zu vermeiden und die Funktion etwas klarer Sie es auch so schreiben machen könnte:

firstLetter = ((contact?.firstName ?? "") + (contact?.lastName ?? "")) 
       .characters.first?.description.uppercased() 
0
var firstLetter = (contact?.firstName.characters.first ?? contact?.lastName.characters.first)?.description.uppercased() 
Verwandte Themen