kotlin中是否有任何方法将以下两行替换为一行。我知道我可以创建一个扩展函数,但我很想知道它是否已经存在于kotlin中。类似于// create an NSMutableAttributedString that we'll append everything to
let fullString = NSMutableAttributedString(string: "Start of text")
// create our NSTextAttachment
let image1Attachment = NSTextAttachment()
image1Attachment.image = UIImage(named: "Icon.png")
// wrap the attachment in its own attributed string so we can append it
let image1String = NSAttributedString(attachment: image1Attachment)
// add the NSTextAttachment wrapper to our full string, then add some more text.
fullString.append(image1String)
fullString.append(NSAttributedString(string: "End of text"))
// draw the result in a label
yourLabel.attributedText = fullString
。
listOfChecklist.clearAndAddAll()
这就是我现在使用扩展功能手动完成的操作。但我希望有更好的解决方案。
listOfChecklist.clear()
listOfChecklist.addAll(newList)
答案 0 :(得分:5)
这是不可能的。解决案例的惯用方法是使用像with
这样的范围函数。我不认为这里有很大的优势。
val list = mutableListOf<String>()
with(list){
clear()
addAll(arrayListOf())
}
答案 1 :(得分:1)
我的回答将是相当哲学的,所以这是我的想法:
如果你真的觉得有必要将这两个操作合并为一行代码,那么建议你经常使用它。
如果您经常使用这种设计模式,在我看来,您的应用程序/类的整体设计中存在一些错误,在这里我完全赞同&#34;我希望在那里&#39没有这样的方法&#34;评论@miensol。
如果您不经常使用它,我认为将其留在2行代码上会使其更具可读性。
清除&#34; listOfChecklist&#34;只有在&#34; newlist&#34;在某些时候也会被清除,否则你可以像以下一样保留参考:&#34; listOfChecklist = newlist&#34; 并繁荣!你完成了......
如果你使用多个可变列表,它们被清除并且它们之间的元素被复制,那么在我看来它是一种过度使用可变状态,这使你的代码难以推理关于。我建议你看看一些核心的函数式编程原理,它们可以让你完全摆脱clear / addAll的问题: - )。
我不是性能专家,但对于大多数用例,我都没有真正看到重用现有列表的合理好处,而不仅仅是克隆它(如果你真的需要保留它由于某些原因而且说到性能本身,JVM几乎总能做得很好。
结论:如果您真的需要它或者以某种方式设计代码,我建议将它保留在2行,这样您就可以完全避免使用clear / addAll。否则你可以使用你的扩展功能或任何让你感到快乐的事情。
答案 2 :(得分:-2)
您只需从newList
创建一个新实例。
listOfChecklist = ArrayList(newlist)