[英]Appending text in a loop in Swift
我需要追加一個字符串數組,最后得到一個字符串,以下列格式顯示在UILabel
中。
Action1 | Action2 | Action3 | 措施4
for action in actions {
actionLabel.text += "\(action.name) |"
}
這給了我以下錯誤。
'String?' is not identical to 'UInt8'.
出現此錯誤的原因是什么? 有沒有其他方法可以實現這一目標?
謝謝。
這是Swift的許多神秘錯誤消息之一。 據我所知,因為左側和右側不匹配( Optional<String>
vs String
),最好的猜測是你認為雙方都是UInt8
。
為了克服UILabel.text
是可選的這一事實,你可以做很多事情:
actionLabel.text = (actionLabel.text ?? "") + "\(action.name) |"
這將獲取當前值或空字符串並附加文本。 您還可以在功能上避免此問題:
actionLabel.text = join(" | ", map(actions, { $0.name }))
更新
關於具有額外|
迭代解決方案 在“”的最后,我試圖說明導致錯誤的行的解決方案。 您發布的代碼也會假設actionLabel最初為空白,並且多次設置標簽文本會產生一些(可能無關緊要的)性能成本。
完整的迭代方法可能如下所示:
var text = ""
for action in actions {
if text.isEmpty {
text = action.name
} else {
text += " | \(action.name)"
}
}
actionLabel.text = text
映射和連接是一種常見的操作,大多數語言都有干凈簡潔的方法,無需迭代即可完成。 例如,我會在Objective-C中推薦以下內容:
actionLabel.text = [[actions valueForKeyPath:@"name"] componentsJoinedByString:@" | "];
text
屬性是可選的,可以是nil
。 您可以使用可選鏈接來完成此操作。 在完成循環之前還要設置初始文本。
if actionLabel.text == nil {
actionLabel.text = ""
}
for action in actions {
actionLabel.text? += "\(action.name) |"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.