我已经结束了(我带了很多THX到dfri!)不知道如何改变它:
let attributesOverRanges = fooAttrString.getAttributes()
for (rng, attributes) in attributesOverRanges {
print("Attributes over range \(rng):")
attributes.forEach { print("\t\($0.0) = \($0.1)") }
}
这是一些结果行:
Attributes over range (0,12):
NSFont == <UICTFont: 0x7fc7f2d31330> font-family: "Helvetica Neue";
font-weight: bold; font-style: normal; font-size: 17.00pt
现在我必须得到信息
恩朗格
NSFont字体
字体系列:“Helvetica Neue”;字体粗体;字体样式:普通;字体大小:17.00pt
给他们一个数组/字典。我试了很多,但我无法解决这个问题,感觉自己像个菜鸟一样(英语很糟糕)!:-(
你能帮帮我吗
在回答了@rickster之后,我试着用粗体字。但是我得到了一个错误,因为let value=$0.0检索的不是字符串而是字体。我能把字体转换成字符串吗??? 我得在绳子上找到“粗体”。或者你不知道用另一种方法来检查粗体
let attributesOverRanges = fooAttrString.getAttributes()
var newAttributes: [(NSRange, String)] = []
for (rng, attributes) in attributesOverRanges {
attributes.forEach {
let value = $0.0
if value.contains("font-weight: bold") { // ERROR
newAttributes.append((rng, "Bold"))
}
}
print(newAttributes)
}
最佳答案
forEach
是一种对所有序列类型进行遍历的方法,它是for
-in
循环的函数式编程版本。传递给forEach
的闭包接受一个参数,即正在检查的序列的当前元素。(例如,在[1,2,3].forEach { /*...*/ }
中,闭包参数是一个整数。在编写闭包的最短速记中,可以将参数引用为$0
,因此在本例中可以为闭包编写{ print($0) }
。)
在代码中,attributes
是字典。当您在字典上迭代时,元素类型是一个(key, value)
元组。解决元组中的项的最短/标签不可知的方法是通过索引:foo.0
,foo.1
等。
把它们放在一起:在forEach
闭包中,$0.0
是attributes
字典中的一个键,$0.1
是相应的值。
因为您使用的是NSAttributedString
的属性字典,所以键是属性名("NSFont"
是NSFontAttributeName
常量的值),值是与该键对应的任何对象类型(在本例中,NSFont
实例-您看到的打印内容是通过请求其description
得到的字体摘要)。
您可以将它们用作另一个字典(otherDict[$0.0] = $0.1
)中的键值对,也可以只在数组中使用该值,因为不太需要保留“NSFont”字符串(myArray.append($0.1)
)。
找出一个NSFont
实例是否代表一个粗体字实际上不是一个简单的问题,而是一个简单的答案。记住,许多字体都有一个wide variety of weights-通常,字体设计者会给超过某个阈值的权重一个标签,在语义上将它们标识为“粗体”,但并不总是这样。NSFont
有一个配套的APINSFontDescriptor
可以让您获得一些语义信息。这里有一个获取这些信息的方法,以及你的其他信息,但是你需要调整这个方法以适应你的情况:
for (rng, attributes) in attributesOverRanges {
print("NSRange: \(rng) - has attributes:")
for (name, value) in attributes {
if name == NSFontAttributeName {
if let font = value as? NSFont {
print("font name (use with `NSFont(name:size:)`): \(font.fontName)")
let isBold = font.fontDescriptor.symbolicTraits & UInt32(NSFontBoldTrait) != 0
print("is bold font: \(isBold)")
}
}
}
}
关于xcode - 无法在Swift中阅读此闭包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36407224/