[iOS] plist에서 정보를 가져와 UITableView에 표시 in Swift3
어떤 때 필요
자신이 필요로 한 경우로서,
때 필요했습니다.
이번 2.의 경우에서 설명합니다.
1. info.plist에서 데이터 추출
Swift3 버전을.
Swift2에서 상당히 쓰는 방법이 다릅니다.
환경:
Swift3.1
Xcode8.3
예) plist에 저장된 라이브러리의 라이센스 정보 얻기
덧붙여서 Carthage의 라이센스 정보는 이 SwiftScript 에서 빼내면 편리합니다.
이런 plist가 있습니다.
꺼내십시오.
import Foundation
// plist名はtypoを防ぐためEnumで管理
enum FileName: String {
case key = "Key"
case licenses = "Licenses"
}
// ライセンス構造体
struct License {
// ライセンス名を格納する配列
var titles: [String] = []
init?() {
guard let licenses: [[String : Any]] = parsePlist(FileName.licenses) else {
return nil
}
// ライセンス情報の配列からtitleだけ抜き出す。
// flatMapを使えばnilを省いた配列を返してくれるので便利
titles = licenses.flatMap { $0["title"] as? String }
}
// plistに保存しているライセンス情報をparseするメソッド
private func parsePlist(_ fileName: FileName) -> [[String: Any]]? {
// 何かしらparseに失敗したらnilを返す
guard let filePath: URL = Bundle.main.url(forResource: fileName.rawValue, withExtension: "plist") else {
return nil
}
do {
let data = try Data(contentsOf: filePath)
return try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [[String: Any]]
}
catch {
return nil
}
}
}
2. TableView에 라이센스 정보 표시
License 구조의 title 속성만 표시합니다.
import UIKit
class LicensesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
let license = License()
var titles: [String] {
return license?.titles ?? []
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorInset = UIEdgeInsets.zero
tableView.delegate = self
tableView.dataSource = self
self.navigationItem.title = "Acknowledgements"
self.tableView.backgroundColor = UIColor.bg
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.tableFooterView = UIView(frame: CGRect.zero)
}
// MARK: - TableView Delegate
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return titles.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell")!
cell.textLabel?.text = titles[indexPath.row]
cell.accessoryType = .disclosureIndicator
return cell
}
}
할 수 있었다!
참고 사이트
【Swift】API 키를 scheme별로 나누면서 공개 리포지토리에 키를 공개하고 싶지 않을 때
h tp : / / s t c ゔ rf ぉ w. 코 m / 쿠에 s 치온 s / 39910461 / 호 w - 토레 d f m m p st u th th su ft 3 - e s p p
Reference
이 문제에 관하여([iOS] plist에서 정보를 가져와 UITableView에 표시 in Swift3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirothings/items/00669a1b6b3b0b4bc185텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)