带换行符的 NSTextField 字符串
NSTextField string with newlines
我有一系列带有可选 "comment" 字段的对象,其中包含一个字符串。我想提取所有评论并将它们列为 NSTextField(或任何其他合适的视图)中的单独行。所以我这样做了...
@IBOutlet var CommentsTextView: NSTextView!
func CommentsInitialize() {
var cmt = ""
for c in document!.commentCards {
cmt += c.info["comment"] ?? "" + "\n"
}
CommentsTextView.string = cmt
}
文本出现,但作为所有一行 运行 在一起。根据 this 它应该可以正常工作,但换行符根本没有做任何事情(我尝试了 \n、\r\n 和 \r)。我错过了一些明显的东西吗?我可以在 IB 中看到 TextStorage 中有换行模式的设置,但我似乎无法设置它,更改值没有任何作用。
p.s。如果您想知道丢失的 "weak",那显然是一个老问题 Cocoa - 那里的弱者被释放并死亡
问题在于 nil 合并运算符 ??
的优先级 (131
) 低于 +
运算符 (140
),因此该行:
cmt += c.info["comment"] ?? "" + "\n"
将被评估为
cmt += c.info["comment"] ?? ("" + "\n")
随后,换行转义符"\n"
将被添加到cmt
只有当c.info["comment"]
包含nil时
如果用以下内容替换该行
cmt += (c.info["comment"] ?? "") + "\n" // (+)
然后也会为 c.info["comment"]
为 non-nil 的情况添加换行符。
现在,上面的固定过程 (+)
也会为空的 (""
) 以及 nil-valued 注释字段添加换行符,并且还会在最后一个之后添加最后一个换行符评论区内容。如果您只想为实际存在的评论添加换行符(不是 nil
也不为空),您可以使用 if let
可选绑定而不是 nil 合并运算符:
if let str = c.info["comment"] where str.characters.count > 0 {
cmt += str + "\n"
}
/* remove last trailing '\n' */
cmt.removeAtIndex(cmt.endIndex.advancedBy(-1))
我有一系列带有可选 "comment" 字段的对象,其中包含一个字符串。我想提取所有评论并将它们列为 NSTextField(或任何其他合适的视图)中的单独行。所以我这样做了...
@IBOutlet var CommentsTextView: NSTextView!
func CommentsInitialize() {
var cmt = ""
for c in document!.commentCards {
cmt += c.info["comment"] ?? "" + "\n"
}
CommentsTextView.string = cmt
}
文本出现,但作为所有一行 运行 在一起。根据 this 它应该可以正常工作,但换行符根本没有做任何事情(我尝试了 \n、\r\n 和 \r)。我错过了一些明显的东西吗?我可以在 IB 中看到 TextStorage 中有换行模式的设置,但我似乎无法设置它,更改值没有任何作用。
p.s。如果您想知道丢失的 "weak",那显然是一个老问题 Cocoa - 那里的弱者被释放并死亡
问题在于 nil 合并运算符 ??
的优先级 (131
) 低于 +
运算符 (140
),因此该行:
cmt += c.info["comment"] ?? "" + "\n"
将被评估为
cmt += c.info["comment"] ?? ("" + "\n")
随后,换行转义符"\n"
将被添加到cmt
只有当c.info["comment"]
包含nil时
如果用以下内容替换该行
cmt += (c.info["comment"] ?? "") + "\n" // (+)
然后也会为 c.info["comment"]
为 non-nil 的情况添加换行符。
现在,上面的固定过程 (+)
也会为空的 (""
) 以及 nil-valued 注释字段添加换行符,并且还会在最后一个之后添加最后一个换行符评论区内容。如果您只想为实际存在的评论添加换行符(不是 nil
也不为空),您可以使用 if let
可选绑定而不是 nil 合并运算符:
if let str = c.info["comment"] where str.characters.count > 0 {
cmt += str + "\n"
}
/* remove last trailing '\n' */
cmt.removeAtIndex(cmt.endIndex.advancedBy(-1))