programing

NSA 귀속 문자열을 연결하려면 어떻게 해야 합니까?

bestprogram 2023. 7. 1. 09:04

NSA 귀속 문자열을 연결하려면 어떻게 해야 합니까?

문자열을 병합하기 전에 일부 문자열을 검색하고 속성을 설정해야 하므로 NSStrings -> 연결 -> NSA 속성 문자열 만들기는 옵션이 아닙니다. attributedString을 다른 속성 문자열에 연결할 수 있는 방법이 있습니까?

@Linuxios에서 제안한 단일 가변 속성 문자열을 사용하는 것이 좋습니다. 여기 또 다른 예가 있습니다.

NSMutableAttributedString *mutableAttString = [[NSMutableAttributedString alloc] init];

NSString *plainString = // ...
NSDictionary *attributes = // ... a dictionary with your attributes.
NSAttributedString *newAttString = [[NSAttributedString alloc] initWithString:plainString attributes:attributes];

[mutableAttString appendAttributedString:newAttString];

그러나 모든 옵션을 사용할 수 있도록 이미 조합된 입력 문자열이 포함된 형식화된 NSString으로 만든 단일 가변 속성 문자열을 만들 수도 있습니다.그러면 사용할 수 있습니다.addAttributes: range:입력 문자열을 포함하는 범위에 사실 뒤의 속성을 추가합니다.하지만 저는 전자 방식을 추천합니다.

스위프트를 사용하고 있다면, 당신은 단지 오버로드를 할 수 있습니다.+연산자를 사용하여 일반 문자열을 연결하는 것과 같은 방식으로 연결할 수 있습니다.

// concatenate attributed strings
func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString
{
    let result = NSMutableAttributedString()
    result.append(left)
    result.append(right)
    return result
}

이제 추가하기만 하면 연결할 수 있습니다.

let helloworld = NSAttributedString(string: "Hello ") + NSAttributedString(string: "World")

Swift 3: NSMutableAttributedString을 만들고 여기에 속성 문자열을 추가하기만 하면 됩니다.

let mutableAttributedString = NSMutableAttributedString()

let boldAttribute = [
    NSFontAttributeName: UIFont(name: "GothamPro-Medium", size: 13)!,
    NSForegroundColorAttributeName: Constants.defaultBlackColor
]

let regularAttribute = [
    NSFontAttributeName: UIFont(name: "Gotham Pro", size: 13)!,
    NSForegroundColorAttributeName: Constants.defaultBlackColor
]

let boldAttributedString = NSAttributedString(string: "Warning: ", attributes: boldAttribute)
let regularAttributedString = NSAttributedString(string: "All tasks within this project will be deleted.  If you're sure you want to delete all tasks and this project, type DELETE to confirm.", attributes: regularAttribute)
mutableAttributedString.append(boldAttributedString)
mutableAttributedString.append(regularAttributedString)

descriptionTextView.attributedText = mutableAttributedString

swift5 upd:

    let captionAttribute = [
        NSAttributedString.Key.font: Font.captionsRegular,
        NSAttributedString.Key.foregroundColor: UIColor.appGray
    ]

사용해 보십시오.

NSMutableAttributedString* result = [astring1 mutableCopy];
[result appendAttributedString:astring2];

어디에astring1그리고.astring2이다NSAttributedStrings.

2020 | SWIFT 5.1:

2개를 추가할 수 있습니다.NSMutableAttributedString다음 방법으로:

let concatenated = NSAttrStr1.append(NSAttrStr2)

또 다른 방법은NSMutableAttributedString그리고.NSAttributedString둘 다:

[NSAttrStr1, NSAttrStr2].joinWith(separator: "")

또 다른 방법은..

var full = NSAttrStr1 + NSAttrStr2 + NSAttrStr3

그리고:

var full = NSMutableAttributedString(string: "hello ")
// NSAttrStr1 == 1


full += NSAttrStr1 // "hello 1"       
full += " world"   // "hello 1 world"

다음 확장자를 사용하여 이 작업을 수행할 수 있습니다.

// works with NSAttributedString and NSMutableAttributedString!
public extension NSAttributedString {
    static func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString {
        let leftCopy = NSMutableAttributedString(attributedString: left)
        leftCopy.append(right)
        return leftCopy
    }
    
    static func + (left: NSAttributedString, right: String) -> NSAttributedString {
        let leftCopy = NSMutableAttributedString(attributedString: left)
        let rightAttr = NSMutableAttributedString(string: right)
        leftCopy.append(rightAttr)
        return leftCopy
    }
    
    static func + (left: String, right: NSAttributedString) -> NSAttributedString {
        let leftAttr = NSMutableAttributedString(string: left)
        leftAttr.append(right)
        return leftAttr
    }
}

public extension NSMutableAttributedString {
    static func += (left: NSMutableAttributedString, right: String) -> NSMutableAttributedString {
        let rightAttr = NSMutableAttributedString(string: right)
        left.append(rightAttr)
        return left
    }
    
    static func += (left: NSMutableAttributedString, right: NSAttributedString) -> NSMutableAttributedString {
        left.append(right)
        return left
    }
}

Cocoapods를 사용하는 경우, 자신의 코드에서 변동성을 방지할 수 있는 위의 두 답변에 대한 대안은 우수한 NSA 귀속 String+CCL 형식 범주를 사용하는 것입니다.NSAttributedString다음과 같은 것을 쓸 수 있습니다.

NSAttributedString *first = ...;
NSAttributedString *second = ...;
NSAttributedString *combined = [NSAttributedString attributedStringWithFormat:@"%@%@", first, second];

물론 그것은 그냥 사용합니다.NSMutableAttributedString비밀리에

또한 완전한 포맷 기능이라는 추가적인 이점이 있으므로 문자열을 함께 추가하는 것보다 훨씬 더 많은 기능을 수행할 수 있습니다.

// Immutable approach
// class method

+ (NSAttributedString *)stringByAppendingString:(NSAttributedString *)append toString:(NSAttributedString *)string {
  NSMutableAttributedString *result = [string mutableCopy];
  [result appendAttributedString:append];
  NSAttributedString *copy = [result copy];
  return copy;
}

//Instance method
- (NSAttributedString *)stringByAppendingString:(NSAttributedString *)append {
  NSMutableAttributedString *result = [self mutableCopy];
  [result appendAttributedString:append];
  NSAttributedString *copy = [result copy];
  return copy;
}

SwiftyFormat은 다음 구문을 사용합니다.

let format = "#{{user}} mentioned you in a comment. #{{comment}}"
let message = NSAttributedString(format: format,
                                 attributes: commonAttributes,
                                 mapping: ["user": attributedName, "comment": attributedComment])
private var fillAttributes:[NSMutableAttributedString.Key : Any]? = nil

fontAttributes = [.foregroundColor : SKColor.red,
                  .strokeWidth : 0.0,
                  .font : CPFont(name: "Verdana-Bold",
                  .size : 50,]

fontAttributes.updateValue(SKColor.green, forKey: .foregroundColor)

언급URL : https://stackoverflow.com/questions/18518222/how-can-i-concatenate-nsattributedstrings