Isu*_*uru 5 arrays string append ios swift
我需要追加一个字符串数组,最后得到一个字符串,以 UILabel下列格式显示.
Action1 | Action2 | Action3 | 措施4
for action in actions {
actionLabel.text += "\(action.name) |"
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误.
'String?' is not identical to 'UInt8'.
Run Code Online (Sandbox Code Playgroud)
出现此错误的原因是什么?有没有其他方法可以实现这一目标?
谢谢.
Bri*_*kel 15
这是Swift的许多神秘错误消息之一.据我所知,因为左侧和右侧不匹配(Optional<String>vs String),最好的猜测是你的意思是双方都是UInt8.
为了克服UILabel.text可选的事实,你可以做很多事情:
actionLabel.text = (actionLabel.text ?? "") + "\(action.name) |"
Run Code Online (Sandbox Code Playgroud)
这将获取当前值或空字符串并附加文本.您还可以在功能上避免此问题:
actionLabel.text = join(" | ", map(actions, { $0.name }))
Run Code Online (Sandbox Code Playgroud)
更新
关于|在""中有一个额外的迭代解决方案,我试图说明导致错误的行的解决方案.您发布的代码也会假设actionLabel最初为空白,并且多次设置标签文本会产生一些(可能无关紧要的)性能成本.
完整的迭代方法可能如下所示:
var text = ""
for action in actions {
if text.isEmpty {
text = action.name
} else {
text += " | \(action.name)"
}
}
actionLabel.text = text
Run Code Online (Sandbox Code Playgroud)
映射和连接是一种常见的操作,大多数语言都有干净简洁的方法,无需迭代即可完成.例如,我会在Objective-C中推荐以下内容:
actionLabel.text = [[actions valueForKeyPath:@"name"] componentsJoinedByString:@" | "];
Run Code Online (Sandbox Code Playgroud)
text属性是可选的nil.您可以使用可选链接来完成此操作.在完成循环之前还要设置初始文本.
if actionLabel.text == nil {
actionLabel.text = ""
}
for action in actions {
actionLabel.text? += "\(action.name) |"
}
Run Code Online (Sandbox Code Playgroud)