[Swift3] フォトアルバム名を指定して、アルバムが存在しなければ新規作成

  • 4
    Like
  • 0
    Comment

前提

要素 バージョン
xcode 8.2.1
Swift 3.0.2
iPhone 6s
iOS 10.2.1

また、以下を満たした状態。以下はググればスグ出る内容なので本記事では割愛

  • PhotosFrameworkを利用できる状態にある
  • ライブラリの利用をユーザから許可を取っている

概要

アルバム名を指定し、そのアルバムが端末内に存在するかをチェックし、存在しない場合に新規作成したい。適当にググって出てきた日本語の参考ページ通りにコードを書いても動かなかったので、公式リファレンスを参考に自前で実装。

コード

/**
* 端末に指定した名称のアルバムを作成する
* ただし既に同名のアルバムが存在する場合は作成しない
* @params albumTitle アルバム名
* @params callback   アルバム生成後に呼び出されるコールバック
*/
func createNewAlbum(albumTitle: String, callback: @escaping (Bool) -> Void) {
  if self.checkAlbumExists(albumTitle: albumTitle) {
    callback(true)
  } else {
    PHPhotoLibrary.shared().performChanges({
      PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: albumTitle)
    }) { (isSuccess, error) in
      callback(isSuccess)
    }
  }
}

/**
* 端末に指定した名称のアルバムが存在するかを戻す
* @params albumTitle アルバム名
* @return 存在する場合True
*/
func checkAlbumExists(albumTitle: String) -> Bool {
  let albums = PHAssetCollection.fetchAssetCollections(with: PHAssetCollectionType.album, subtype: 
  PHAssetCollectionSubtype.albumRegular, options: nil)
  for i in 0 ..< albums.count {
    let album = albums.object(at: i)
    if album.localizedTitle != nil && album.localizedTitle == albumTitle {
      return true
    }
  }
  return false
}

実行例

"グッチ裕三コレクション"アルバムが存在しない場合に作成する。既に存在していたか、作成に成功した場合に"成功"が出力される

createNewAlbum(albumTitle: "グッチ裕三コレクション") { (isSuccess) in
  if isSuccess {  
    print("成功")
  } else {
    print("失敗")
  }
}

参考