Может кто-то помочь мне преобразовать это в Swift:Как я могу перебирать все шрифты в атрибутной строке?
NSAttributedString *attrString = self.attributedText;
NSRange rangeAll = NSMakeRange(0, attrString.length);
// First pass is to check the smallest and largest fontSize so we can prevent changes beyond that.
__block float smallestFontSize = 250;
__block float largestFontSize = 4;
[self.textStorage enumerateAttributesInRange:rangeAll options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:
^(NSDictionary *attributes, NSRange range, BOOL *stop) {
// Iterate over each attribute and look for a Font Size
[attributes enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([[key description] isEqualToString:@"NSFont"]) {
UIFont *font = obj;
float fontSize = font.pointSize + bySize;
smallestFontSize = MIN(smallestFontSize, fontSize);
largestFontSize = MAX(largestFontSize, fontSize);
}
}];
}];
EDIT:
OK решил. Кажется, что компилятор просто пытается разобраться в деталях и показывает всевозможные синтаксические ошибки до тех пор, пока это не произойдет. Также кажется, что переменная attrs
на самом деле не NSDictionary
, а словарь Swift, поэтому необходимо использовать его как NSDictionary
, прежде чем вы сможете использовать enumerateKeysandObjectsUsingBlock
, это правильно?
Если есть лучший способ, пожалуйста, дайте мне знать.
var smallestFontSize: CGFloat = 250
var largestFontSize: CGFloat = 4
self.textStorage.enumerateAttributesInRange(rangeAll, options: NSAttributedStringEnumerationOptions.LongestEffectiveRangeNotRequired, usingBlock: {
attrs, range, stop in
FLOG("")
let dict = attrs as NSDictionary
dict.enumerateKeysAndObjectsUsingBlock { key, obj, stop in
if (key.description.isEqual("NSFont")) {
let font = obj as UIFont
let fontSize = font.pointSize + bySize
smallestFontSize = min(smallestFontSize, fontSize);
largestFontSize = max(largestFontSize, fontSize);
}
}
})
У вас есть что-нибудь до сих пор? Любая конкретная ошибка компилятора? – zneak
Вы пробовали этот конвертировать в быстрый? Это не кодирующая платформа конвертирования. Пожалуйста, поставите здесь свои трудности или проблемы. –
Этот вопрос не соответствует теме, потому что речь идет о переводе с одного языка на другой. – brandonscript