답변:
@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:
사실 이후 속성을 입력 문자열을 포함하는 범위에 추가하는 데 사용할 수 있습니다. 나는 이전 방법을 권장합니다.
Swift를 사용하는 경우 +
일반 문자열을 연결하는 것과 같은 방식으로 연산자를 연결 하여 연산자를 오버로드 할 수 있습니다.
// 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")
return NSAttributedString(attributedString: result)
Helpers
or 라는 폴더를 만들고이 Extensions
함수를라는 파일에 넣습니다 NSAttributedString+Concatenate.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
있습니다 NSAttributedString
.
[[aString1 mutableCopy] appendAttributedString: aString2]
.
NSMutableAttributedString* aString3 = [aString1 mutableCopy]; [aString3 appendAttributedString: aString2];
.
result
됩니다 NSMutableAttributedString
. 저자가보고 싶어하는 것이 아닙니다. stringByAppendingString
-이 방법이 될 것입니다 좋은
2020 | 스위프트 5.1 :
NSMutableAttributedString
다음과 같은 방법으로 2를 추가 할 수 있습니다 .
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 // full == "hello 1"
full += " world" // full == "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
}
}
NSAttrStr1.append(NSAttrStr2)
Cocoapods를 사용하는 경우 자신의 코드에서 변경을 피할 수있는 위의 두 가지 대답에 대한 대안은 다음과 같이 작성할 수 있는 우수한 NSAttributedString + CCLFormat 범주 를 사용하는 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])