2016-07-18 11 views
2

私はスウィフトだけでなく、スタックオーバーフローと言うことから始まりますので、何かを混乱させると謝ります。スウィフトで最後に撮影した写真を取得する

私はSwiftで撮影した最後の写真を取得しようとしています。私はそれがうまくいくようなコードを見つけました。 http://blog.swilliams.me/words/2015/08/09/finding-the-last-photo-taken/

import UIKit 
import Photos 

typealias ImageCallback = (UIImage? -> Void) 

func fetchLastPhoto(resizeTo size: CGSize?, imageCallback: ImageCallback) { 
let fetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 
fetchOptions.fetchLimit = 1 

if let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) { 
    if let asset = fetchResult.firstObject as? PHAsset { 
     let manager = PHImageManager.defaultManager() 
     let targetSize = size == nil ? CGSize(width: asset.pixelWidth, height: asset.pixelHeight) : size! 
     manager.requestImageForAsset(asset, 
      targetSize: targetSize, 
      contentMode: .AspectFit, 
      options: nil, 
      resultHandler: { image, info in 
      imageCallback(image) 
     }) 
    } else { 
     imageCallback(nil) 
    } 
    } 
} 

私は「 を、オプションの種類があってはならない "if let fetchResult = PHAsset.fet...."

エラーが言う始まる行にエラー、「結合条件のため

初期化子を得続けるPHFetchResult '

「012」をクリックすると"と表示されていますが、どのタイプの値であるのかわかりませんので、正しく設定されていません。

解決策がおそらく私がまだ試したことのない本当に単純なものだと感じます。

このエラーの原因は何ですか?

答えて

2

PHAsset.fetchAssetsWithMediaType(_:options:)メソッドの宣言を確認してください。 (クイックヘルプが十分に動作します。)

class func fetchAssetsWithMediaType(mediaType: PHAssetMediaType, options: PHFetchOptions?) -> PHFetchResult 

メソッドの戻り値の型はオプションではないことにそれを意味し、末尾の?を持っていないPHFetchResult、です。

オプションのバインディングの右側に非オプションのタイプを使用することはできません。これはエラーメッセージの内容です。また、の場合は、NULL可能性を確認する必要はありません。if-letです。

エラーの原因となったif-letを削除して、単純な宣言に置き換えてください。

func fetchLastPhoto(resizeTo size: CGSize?, imageCallback: ImageCallback) { 
    let fetchOptions = PHFetchOptions() 
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 
    fetchOptions.fetchLimit = 1 

    let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) 
    //`fetchResult` is not nil here (without using `if-let`) 
    if let asset = fetchResult.firstObject as? PHAsset { 
     let manager = PHImageManager.defaultManager() 
     let targetSize = size == nil ? CGSize(width: asset.pixelWidth, height: asset.pixelHeight) : size! 
     manager.requestImageForAsset(asset, 
            targetSize: targetSize, 
            contentMode: .AspectFit, 
            options: nil, 
            resultHandler: { image, info in 
             imageCallback(image) 
     }) 
    } else { 
     imageCallback(nil) 
    } 
} 
関連する問題