- Swift Photo App
- 1. 依赖
- 2. 设置
- 3. MainStoryBoard
- 4. ViewController.swift
- 5. Info.plist
- 7. 运行App
- 8. 了解更多
Swift Photo App

本示例将会指导你使用Swift构建一个简单的Photo app。在这个app中,你将会学习一个Swift client是如何访问Photo API Service并随机加载一张图片。你可以通过这里获取完整的代码,代码是以Apache 2.0 License发布的。
1. 依赖
我们将使用Xcode7.0和Swift2.0来构建这个app。这个app也会访问我们发布的Photo API Service来随机获获取一张图片的presigned url。
- Xcode 8.3 Beta
- Swift 3.1
2. 设置
启动Xcode并完成下列步骤。
步骤1 - 创建一个新的工程,选择Single View Application,点击Next。

步骤2 - 输入Project Name,Organization Name和Identifiers。我们在本示例中用的是下图所示的值,你想改的话请便。点击Next。

步骤3 - 现在一个空的MainStoryBoard已经准备就绪。

3. MainStoryBoard
- 拖拽一个UIButton到这个StoryBoard。
- 拖拽一个imageView到这个StoryBoard。
- 如果你不太喜欢它们的背景色的话,你可以改成你喜欢的颜色。

4. ViewController.swift
我们将会用到之前构建的Phtoto API Service来给我们的SwiftPhotoApp提供服务。为了简单起见,我们没有用到TableView或者是CollectionView来显示图片列表,我们只是从PhotoAPI Service返回的多个presigned URL中随机选一个进行加载。
import UIKitclass ViewController: UIViewController {@IBAction func refButton(sender: UIButton) {// Set up the URL Object.let url = URL(string: "http://play.minio.io:8080/PhotoAPIService-0.0.1-SNAPSHOT/minio/photoservice/list")// Task fetches the url contents asynchronously.let task = URLSession.shared.dataTask(with: url! as URL) {(data, response, error) inlet httpResponse = response as! HTTPURLResponselet statusCode = httpResponse.statusCode// Process the response.if (statusCode == 200) {do{// Get the json response.let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]// Extract the Album json into the albums array.if let albums = json["Album"] as? [[String: AnyObject]]{// Pick a random index from the albums array.let randomIndex = Int(arc4random_uniform(UInt32(albums.count)))// Extract the url from the albums array using this random index we generated.let loadImageUrl:String = albums[randomIndex]["url"] as! String// Prepare the imageView.self.imageView.contentMode = .scaleAspectFit// Download and place the image in the image view with a helper function.if let checkedUrl = URL(string: loadImageUrl) {self.imageView.contentMode = .scaleAspectFitself.downloadImage(url: checkedUrl)}}}catch {print("Error with Json: \(error)")}}}task.resume()}@IBOutlet weak var imageView: UIImageView!override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}// Asynchronous helper function that fetches data from the PhotoAPIService.func getDataFromUrl(url:URL, completion: @escaping ((_ data: Data?, _ response: URLResponse?, _ error: Error? ) -> Void)) {URLSession.shared.dataTask(with: url as URL) { (data, response, error) incompletion(data, response, error)}.resume()}// Helper function that download asynchronously an image from a given url.func downloadImage(url: URL){getDataFromUrl(url: url) { (data, response, error) inDispatchQueue.main.async() { () -> Void inguard let data = data, error == nil else { return }self.imageView.image = UIImage(data: data as Data)}}}}
5. Info.plist
我们需要在info.plist文件中添加权限,这样的话app才能从play服务上获取URL和图片。

以下是完整的info.plist文件。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>CFBundleDevelopmentRegion</key><string>en</string><key>CFBundleExecutable</key><string>$(EXECUTABLE_NAME)</string><key>CFBundleIdentifier</key><string>$(PRODUCT_BUNDLE_IDENTIFIER)</string><key>CFBundleInfoDictionaryVersion</key><string>6.0</string><key>CFBundleName</key><string>$(PRODUCT_NAME)</string><key>CFBundlePackageType</key><string>APPL</string><key>CFBundleShortVersionString</key><string>1.0</string><key>CFBundleSignature</key><string>????</string><key>CFBundleVersion</key><string>1</string><key>LSRequiresIPhoneOS</key><true/><key>UILaunchStoryboardName</key><string>LaunchScreen</string><key>UIMainStoryboardFile</key><string>Main</string><key>UIRequiredDeviceCapabilities</key><array><string>armv7</string></array><key>UISupportedInterfaceOrientations</key><array><string>UIInterfaceOrientationPortrait</string><string>UIInterfaceOrientationLandscapeLeft</string><string>UIInterfaceOrientationLandscapeRight</string></array><key>NSAppTransportSecurity</key><dict><key>NSExceptionDomains</key><dict><key>play.minio.io</key><dict><key>NSIncludesSubdomains</key><true/><key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key><true/><key>NSTemporaryExceptionMinimumTLSVersion</key><string>1.0</string><key>NSTemporaryExceptionRequiresForwardSecrecy</key><false/></dict></dict></dict></dict></plist>
7. 运行App
- 启动iOS模拟器。
- 点击play按钮deploy这个app到模拟器上并运行。
点击Load Random Image Button随机加载一张图片。
8. 了解更多
Photo API Service Example
- Using minio-javaclient SDK with Minio Server
- Minio Java Client SDK API Reference
原文: https://docs.minio.io/cn/swift-photo-app.html
