티스토리 뷰

TIL

[TIL] 2022 / 08 / 08

희철 2022. 8. 9. 01:46

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의 태그들을 전체적으로 처리할땐 두번째 방법이 더 나은 것 같음.

 

첫 번째 방법에서 사진을 보면 &같은 기호도 &amp;로 남아있는 것을 볼 수 있음.

 

즉, 어떤 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