2017-05-30 42 views
1

我試圖顯示我的聯繫人姓名的首字母大寫爲索引:字符串不能以「誠信」 Swift3

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 
+1

'String'由'String.Index'索引,而不是'詮釋',比較[String.Index如何在Swift 3中工作](https://stackoverflow.com/q/39676939/2976878)。雖然在你的情況下,你可以使用'string.characters.first',它會給你的字符串的第一個字符,或'nil'如果字符串是空的 - 比較[如何獲得數組中的所有字符串的第一個字母在iOS Swift中?](https://stackoverflow.com/q/33792991/2976878)。 – Hamish

+0

這裏聯繫什麼類型?你能顯示「聯繫」類型的定義嗎? – PGDev

回答

0

試試這個:

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

我就能如果你告訴的「接觸」的類型/定義來幫助你。

+0

voici ladéclarationde contact:var contact:TContact? = TContactsManager.shared()。getContactByJID(self.bareJid!.full()) – khouloud

+0

TContact的定義? – PGDev

+0

這是一個包含聯繫信息的類 – khouloud

0

嘗試使用此函數獲取大寫格式的首字母。如果字符串爲空,那麼,你在你的代碼

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

做如果你只需要找到的第一個字符不叫呼叫檢查之前,你可以使用contact?.uppercased().characters.first。 在一般情況下,獲得第n個字符大寫,使用contact?.uppercased()[contact?.index(contact?.startIndex, offsetBy: n)]

0

爲了避免間接性的長鏈,使功能更清楚一點,你也可以寫這樣的:

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