DownloadManager
다운로드 매니저를 사용하기 전에 반드시 AppDelegate 설정을 해야합니다.
func application(
_ application: UIApplication,
handleEventsForBackgroundURLSession identifier: String,
completionHandler: @escaping () -> Void
) {
DownloadManager.shared.setBackgroundCompletionHandler(
sessionIdentifier: identifier,
completionHandler: completionHandler
)
}
위와 같은 부분을 추가하여야, 앱이 백그라운드인 상태가 되어도 다운로드 관련 작업을 원활하게 진행할 수 있습니다.
class DownloadManager : NSObject, URLSessionDownloadDelegate
다운로드 매니저 클래스는 아래와 같은 속성과 메서드를 가지고 있습니다.
정적 속성
shared
static let shared: DownloadManager { get }
타입 | 설명 | 설정 |
---|---|---|
DownloadManager | 현재 활성화된 다운로드 매니저에 접근하기 위한 속성 | 불가능 |
다운로드 매니저에 접근하기 위한 정적 속성입니다. 아래에 언급되는 속성 및 메서드를 호출할 때, DownloadManager.shared를 사용하여 접근할 수 있습니다.
속성
downloadsUrl
var downloadsUrl: URL { get }
타입 | 설명 | 설정 |
---|---|---|
URL | 다운로드된 아이템이 저장되는 최상위 디렉토리 | 불가능 |
다운로드된 아이템이 저장되는 디렉토리 중 최상위 디렉토리를 나타내는 속성입니다.
items
var items: [DownloadItem] { get }
타입 | 설명 | 설정 |
---|---|---|
[DownloadItem] | 현재 다운로드 목록에 있는 아이템들 | 불가능 |
현재 다운로드 목록에 있는 아이템들을 반환하는 속성입니다.
maxParallelDownloads
var maxParallelDownloads: Int { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Int | 동시에 다운받을 수 있는 아이템 최대 개수 | 가능 | 3 |
동시에 받을 수 있는 아이템의 최대 개수를 반환하거나 설정합니다.
메서드
add(mediaItem:allowsCellularAccess:)
@discardableResult func add(
mediaItem: MediaItem,
allowsCellularAccess: Bool = true
) -> DownloadItem.Id
파라미터 | 타입 | 설명 | 필수 | 기본값 |
---|---|---|---|---|
mediaItem | MediaItem | 추가하고자 하는 미디어 아이템 | O | 없음 |
allowsCellularAccess | Bool | 다운로드 시 셀룰러 데이터 사용 여부 | X | true |
다운로드를 할 미디어 아이템을 추가합니다. 현재 다운로드가 진행되고 있는 아이템의 수가 maxParallelDownloads 보다 적으면 바로 다운로드를 시작합니다. 셀룰러 데이터 사용을 허용하지 않으려면, allowsCellularAccess를 false로 설정하여 호출하십시오.
addListener(_)
func addListener(_ listener: DownloadManager.Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | DownloadManager.Listener | 추가할 다운로드 매니저 리스너 |
다운로드 매니저 리스너를 추가하기 위한 메서드입니다. 리스너를 추가한 후, 해당 리스너가 더 이상 필요 없을 떄는 반드시 removeListener(_) 메서드를 사용해서 제거하세요.
itemsByStatus(_)
func itemsByStatus(_ status: DownloadItem.Status) -> [DownloadItem]
파라미터 | 타입 | 설명 |
---|---|---|
status | DownloadItem.Status | 가져오고자 하는 아이템의 다운로드 상태 |
특정 다운로드 상태의 아이템 목록을 가져오기 위해서 사용하는 메서드입니다.
pause(id:)
func pause(id: DownloadItem.Id)
파라미터 | 타입 | 설명 |
---|---|---|
id | DownloadItem.Id | 일서 정지할 다운로드 아이템의 아이디 |
다운로드를 일시 정지할 때 사용하는 메서드입니다.
pauseAll()
func pauseAll()
다운로드 목록에 있는 모든 아이템의 다운로드를 일시 정지하게 하는 메서드입니다.
remove(id:)
func remove(id: DownloadItem.Id)
파라미터 | 타입 | 설명 |
---|---|---|
id | DownloadItem.Id | 제거할 다운로드 아이템의 아이디 |
다운로드 목록에서 아이템을 지울 때 사용하는 메서드입니다.
removeAll()
func removeAll()
다운로드 아이템 목록을 모두 지우는 메서드입니다.
removeCompleted()
func removeCompleted()
다운로드가 완료된 아이템을 목록에서 모두 지우는 메서드입니다.
removeListener(_)
func removeListener(_ listener: DownloadManager.Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | DownloadManager.Listener | 제거할 다운로드 매니저 리스너 |
다운로드 매니저 리스너를 제거하기 위한 메서드입니다.
resume(id:)
func resume(id: DownloadItem.Id)
파라미터 | 타입 | 설명 |
---|---|---|
id | DownloadItem.Id | 계속 진행할 다운로드 아이템의 아이디 |
다운로드를 일시 정지한 아이템의 다운로드를 재개하는 메서드입니다.
resumeAll()
func resumeAll()
일시 정지한 모든 아이템의 다운로드를 재개하는 메서드입니다.