如何避免类型丢失?
问题描述:
enum Media {
case image
case video
}
struct UploadManager {
static func upload(mediaType: Media, data: AnyObject, completion: Response -> Void) {
switch mediaType {
case .image:
uploadImage(data as? UIImage, completion: completion)
case .video:
uploadVideo(data as? NSURL, completion: completion)
}
}
static func uploadImage(image: UIImage, completion: Response -> Void) {
let imageData = UIImagePNGRepresentation(image)! as NSData
let options = ["resourcetype": "image"]
//API call
}
static func uploadVideo(filePath: NSURL, completion: Response -> Void) {
let options = ["resourcetype": "video"]
//API call
}
}
样品呼叫将是:如何避免类型丢失?
UploadManager.upload(.image, data: data, completion: {
})
这里林制作请求与图像配类型和数据UploadManager。我担心图像和数据是互相排斥的,容易出错。说,我通过.image而不是.video,而向下广播它会导致崩溃。任何方式来处理这个问题
答
你可以在你的枚举中嵌入数据。例如:
enum Media {
case Image(image: UIImage)
case Video(url: NSURL)
}
而且你可以在match-case
提取出来:
static func upload(media: Media, completion: Response -> Void) {
switch media {
case .Image(let image):
uploadImage(image, completion: completion)
case .Video(let url):
uploadVideo(url, completion: completion)
}
}
然后,您可以调用此方法是这样的:
let image = UIImage()
UploadManager.upload(.Image(image)) { response in
print("Upload complete!")
}