LoginSignup
0
0

More than 1 year has passed since last update.

SwiftUI URLからページタイトルを取得

Posted at

SwiftUI URLからページタイトルを取得

import Combine
import Foundation

class GetTitleForLink: ObservableObject {
    @Published var url: String = ""

    @Published var title: String = ""

     var cancellables = Set<AnyCancellable>()

    init() {
        $url.sink { [weak self] _ in
            guard let self else { return }
            self.fetchURLTitle()
        }
        .store(in: &cancellables)
    }

    func fetchURLTitle() {
        guard let url = URL(string: url) else { return }
        URLSession.shared.dataTaskPublisher(for: url)
            .map { data, _ in String(data: data, encoding: .utf8) }
            .compactMap { $0 }
            .replaceError(with: "")
            .receive(on: DispatchQueue.global())
            .map { html in
                guard let range = html.range(of: "<title>.*?</title>", options: .regularExpression, range: nil, locale: nil) else { return "" }
                return html[range].replacingOccurrences(of: "</?title>", with: "", options: .regularExpression, range: nil)
            }
            .receive(on: DispatchQueue.main)
            .sink { [weak self] title in
                guard let self else { return }
                self.title = title
            }
            .store(in: &cancellables)
    }
}

@EnvironmentObject で受け取って使用できる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0