DÜZENLEME:
@fluidsonic orijinal kod yanlış olduğunu doğru mu. Aşağıda, Swift'de, her bir özellik aralığındaki metni, bu aralıktaki dizenin genişletilmiş bir sürümüyle değiştiren güncellenmiş bir sürüm bulunmaktadır.
extension NSAttributedString {
func uppercased() -> NSAttributedString {
let result = NSMutableAttributedString(attributedString: self)
result.enumerateAttributes(in: NSRange(location: 0, length: length), options: []) {_, range, _ in
result.replaceCharacters(in: range, with: (string as NSString).substring(with: range).uppercased())
}
return result
}
}
Orjinal cevap: Bu ne yapar
- (NSAttributedString *)upperCaseAttributedStringFromAttributedString:(NSAttributedString *)inAttrString {
// Make a mutable copy of your input string
NSMutableAttributedString *attrString = [inAttrString mutableCopy];
// Make an array to save the attributes in
NSMutableArray *attributes = [NSMutableArray array];
// Add each set of attributes to the array in a dictionary containing the attributes and range
[attrString enumerateAttributesInRange:NSMakeRange(0, [attrString length]) options:0 usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) {
[attributes addObject:@{@"attrs":attrs, @"range":[NSValue valueWithRange:range]}];
}];
// Make a plain uppercase string
NSString *string = [[attrString string]uppercaseString];
// Replace the characters with the uppercase ones
[attrString replaceCharactersInRange:NSMakeRange(0, [attrString length]) withString:string];
// Reapply each attribute
for (NSDictionary *attribute in attributes) {
[attrString setAttributes:attribute[@"attrs"] range:[attribute[@"range"] rangeValue]];
}
return attrString;
}
:
- giriş atfedilen bir ip değişken kopyasını yapar.
- Tüm öznitelikleri bu dizeden alır ve daha sonra kullanabilmeleri için bunları bir diziye koyar.
- Dahili
NSString
yöntemini kullanarak büyük harfli düz bir dize yapar.
- Tüm nitelikleri tekrar uygular. çözüm için
teşekkürler. – AmitSri
Rica ederim. – spudwaffle
Kod doğru değil. Özniteliklerin birkaç karakter tarafından kapalı olduğu atfedilen dizeleri üretebilir ve hatta çökebilir. Yaklaşım, başlangıç dizisine ve aynı sayıda karaktere sahip olan büyük harfli dizeye bağlıdır. Ancak [belgeler] 'e göre (https://developer.apple.com/reference/foundation/nsstring/1409855-uppercased) "Vaka dönüşümlerinin simetrik olması ya da orijinallerle aynı uzunluktaki dizileri üretmesi garanti edilmez. ". – fluidsonic