-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDefaultExternalLinkRepository.swift
More file actions
37 lines (33 loc) · 1.2 KB
/
DefaultExternalLinkRepository.swift
File metadata and controls
37 lines (33 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Copyright © 2026 Booket. All rights reserved
import BKCore
import BKDomain
import Combine
import UIKit
final class DefaultExternalLinkRepository: ExternalLinkRepository {
func canOpen(_ urlString: String) -> Bool {
guard let url = URL(string: urlString) else {
Log.error("유효하지 않은 URL 형식: \(urlString)", logger: AppLogger.network)
return false
}
return UIApplication.shared.canOpenURL(url)
}
func open(_ urlString: String) -> AnyPublisher<Bool, Never> {
return Future<Bool, Never> { promise in
guard let url = URL(string: urlString) else {
Log.error("URL 객체 생성 실패: \(urlString)", logger: AppLogger.network)
promise(.success(false))
return
}
DispatchQueue.main.async {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:]) { success in
promise(.success(success))
}
} else {
promise(.success(false))
}
}
}
.eraseToAnyPublisher()
}
}