티스토리 뷰
HTML 태그 제거
1. replacingOccurrences 이용
문자열을 치환해주는 메서드임.
someString.replacingOccurrences(of: "123", with: "33")
-> someString이라는 문자열 안의 123을 전부 33으로 바꿔줌.
그래서 <b>, </b> 같은 태그들이 정해져있는 것들만 있는 경우에 사용할 수 있을듯.
여러 개를 동시에 바꾸고 싶을 때는 반복해서 써주면됨.
2. String Extension 사용
구글링을 하다 https://ios-development.tistory.com/485에서 알게된 방법.
문자열 내부에서 따로 코드를 작성하여 처리해주는 것 같음.
extension String {
init?(htmlEncodedString: String) {
guard let data = htmlEncodedString.data(using: .utf8) else {
return nil
}
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
]
guard let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else {
return nil
}
self.init(attributedString.string)
}
}
아직 정확히는 모르겠지만 option에서 타입을 html으로 설정하여 html과 관련된 태그들을 rawValue만 꺼내는 느낌임.
html의 태그들을 전체적으로 처리할땐 두번째 방법이 더 나은 것 같음.
첫 번째 방법에서 사진을 보면 &같은 기호도 &로 남아있는 것을 볼 수 있음.
즉, 어떤 html 문자들이 있는지 알 수 없으므로(데이터가 많은 경우) 두 번째 방법을 통해 해결하면 깔끔할 것 같음.
Class Singleton과 Struct Singleton
이전에 배웠듯이 클래스는 참조 타입이고 구조체는 값 타입임.
싱글턴 패턴은 하나의 인스턴스만 생성되어야 함.
https://hyerios.tistory.com/254를 참고하여 테스트해봤음
싱글턴 패턴으로 만들어놓고 하나의 인스턴스만 생성되는지 확인하면됨.
먼저, 클래스부터 확인해봄.
class Hee {
private init() {}
static let shared = Hee()
var test = 1
}
let firstInstance = Hee.shared
let secondInstance = Hee.shared
firstInstance.test = 3
print(secondInstance.test)
위의 코드를 실행하면 firstInstance.test의 값을 바꿔주어도 secondInstance.test의 값도 3으로 바뀌었음.
즉, 동일한 인스턴스라는 얘기임.
다음으로, 구조체에서 확인해봄.
struct Hee {
private init() {}
static let shared = Hee()
var test = 1
}
var firstInstance = Hee.shared
var secondInstance = Hee.shared
firstInstance.test = 3
print(secondInstance.test)
일단 let으로 선언하면 struct의 경우 값 타입이기 때문에 firstInstance.test의 값을 바꿀 수가 없음.
var로 선언하고 프린트해보면 secondInstance.test의 값은 그대로 1이 나옴.
즉, 서로 다른 인스턴스라는 얘기임.
결론적으로 구조체로 싱글턴 패턴을 이용하는 것은 모순임.
'TIL' 카테고리의 다른 글
[TIL] 2022 / 08 / 11 (0) | 2022.08.12 |
---|---|
[TIL] 2022 / 08 / 10 (0) | 2022.08.11 |
[TIL] 2022 / 08 / 06 (0) | 2022.08.06 |
[TIL] 2022 / 08 / 05 (0) | 2022.08.06 |
[TIL] 2022 / 08 / 04 (TMDB 프로젝트) (0) | 2022.08.05 |
- Total
- Today
- Yesterday