簡體   English   中英

在Swift中循環添加文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM