Playgoundをもっと使いこなす！



### Swiftのちょっとしたコードを試せるPlaygound。
### 私はまだまだその真価を活かしきれないのかもしれません。  



-------

### ちょっと便利になるPlaygroundのTipsを紹介したいと思います。

------

# 独自フレームワークをインポートする

------


自分で作ったフレームワークをインポートしたい時ありますよね？
ありますよね？

------

### 作りましょう。

------

## Playgoundでフレームワークインポート

1. アプリケーションプロジェクトを作成
2. プロジェクトをワークスペースとして保存。
3. そのアプリケーションプロジェクトの中にPlaygoundを作成
4. ワークスペースにフレームワークプロジェクトを追加
5. ApplicationのGeneralのEmbedded BinariesとLinked Frameworks and Librariesに該当フレームワークをインポートする

-------

### アプリケーションプロジェクトを作成




![ 2017-03-28 0.35.05.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/1b65e805-dfc7-98d6-d21a-6fd052d5a51a.jpeg " 2017-03-28 0.35.05.jpg")


------

### プロジェクトをワークスペースとして保存。

![fig1.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/19974e19-9df7-5815-46e3-3335a3c930e4.jpeg "fig1.jpg")


-------

### そのアプリケーションプロジェクトの中にPlaygoundを作成

File -> New -> File...からPlaygroundを選択

![fig2.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/ceaf959c-8778-5fc8-5a95-8af7e36e1a37.jpeg "fig2.jpg")

* File -> New -> Playground だとプロジェクトに紐付かないプレイグランドが作成されるので注意

--------

### そのアプリケーションプロジェクトの中にPlaygoundを作成

![ 2017-03-25 18.04.38.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/5437e233-cf8a-73a1-c069-2a253b66104b.jpeg " 2017-03-25 18.04.38.jpg")

-------

### ワークスペースにフレームワークプロジェクトを追加

![fig4.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/a9d2d827-20d8-9e8f-ae44-1d62b2290175.jpeg "fig4.jpg")

-----

### ワークスペースにフレームワークプロジェクトを追加
Add to にワークスペースを指定する

![fig6.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/62b6a708-e113-7a47-43cd-2ee7a23bd138.jpeg "fig6.jpg")


-------

### ApplicationのGeneralのEmbedded BinariesとLinked Frameworks and Librariesに該当フレームワークをインポートする

![ 2017-03-25 18.12.00.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/5141ce81-ae45-5398-1f37-1d55e4d26a29.jpeg " 2017-03-25 18.12.00.jpg")


-------

## インポートできた！


![ 2017-03-28 13.16.53.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/5f3e7c74-0440-c041-d37d-8c1bbead2c31.jpeg " 2017-03-28 13.16.53.jpg")

> アプリケーション側でビルドが必要

-------

# PlaygoundでUITableView

-------


## PlaygoundでもUITableViewを表示できます！


![20170328_1490676681.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/ff8ba9c1-fd54-4842-716b-5fe399d18503.jpeg "20170328_1490676681.jpg")



------

## PlaygoundでUITableView
1. PlaygroundSupportをインポート
2. TableViewのモデルを作る
3. TableViewを作成
4. PlaygroundのLiveViewにTableViewを代入

------

### PlaygroundSupportをインポート

```swift
import PlaygroundSupport

```

------

### TableViewのモデルを作る
アプリの設定ページを想定してます

```swift
enum Section: String {
    case settiong = "設定"
    case support = "サポート"
    case info = "製品情報"
    
}

enum Row: String {
    case userSettiong = "ユーザー情報"
    case config = "アプリを設定"
    case faq = "よくある質問"
    case howToUse = "使い方"
    case site = "公式サイト"
    case privacyPoricy = "プライバシーポリシー"
    case term = "利用規約"
    case contact = "お問い合わせ"
}

struct SectionList {
    var type: Section
    var items: [Row]
}

let settingList = [
    SectionList.init(type: .settiong, items: [.userSettiong, .config]),
    SectionList.init(type: .support, items: [.faq, .howToUse, .site]),
    SectionList.init(type: .info, items: [.privacyPoricy, .term, .contact])
]

```

-------

### TableViewを作成

UITabieViewControllerのサブクラスを作成。
overrideでテーブルの設定をしていきます。

```swift
final class SettingTableViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.white
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return settingList[section].items.count
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 80.0
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return settingList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: nil)
        let sectionItem = settingList[indexPath.section].items[indexPath.row]
        cell.textLabel?.text = sectionItem.rawValue
        return cell
    }
    
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return settingList[section].type.rawValue
    }
    
    override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        view.tintColor = UIColor.gray
        let header = view as! UITableViewHeaderFooterView
        header.textLabel?.textColor = UIColor.white
    }
}



```


------

### PlaygroundのLiveViewにTableViewを代入




`needsIndefiniteExecution`をtrueにしてプレイグランドを無限に実行させる。
`liveView`にTableViewを代入する


```swift
let viewController = SettingTableViewController()
viewController.title = "設定ページ"
let navigationController = UINavigationController(rootViewController: viewController)
navigationController.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480)

PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = navigationController.view

```

-------

## プレイグランドをまだまだ出来る子(๑•̀ㅂ•́)و✧