Xcodeに関するあれこれ

自分メモです


#基本操作画面

####ワークスペース
<img width="605" alt="スクリーンショット 2018-01-02 19.43.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/192887/da62e666-d7c2-5ae2-685b-b9deb209cb62.png">

####ナビゲーター領域
<img width="653" alt="スクリーンショット 2018-01-02 19.42.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/192887/992216da-a7f5-5e48-5ffb-ab8303fcc8ad.png">

#.swift拡張子
通常、
- AppDelegate.swift
- ViewController.swift
の２種類あります。
1つの.swiftに複数のclassを書くことができますが、通常は1つだけ書くようです。


##ViewController

<img width="632" alt="スクリーンショット 2018-01-02 19.46.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/192887/184142a4-2a91-8a77-326d-37f2858750a5.png">

###import
```import UIKit```
UIKitというフレームワークをインポートします。
デフォルトで用意されているようで、その機能を使ったり上書きしたりできます。

###class
UIKitで用意されているclassを、新しく使えるよう再利用します。
```class 新しいクラス名: 元のクラス名```

swiftにおけるclassについてはこちらが大変勉強になります。
参考：[Xcode Swiftのクラス](http://stickpan.hatenablog.com/entry/2016/02/22/193940)

###classのoverride
{}でclassの中に上書き=overrideします。

```
override func 新しいoverride名() {
super.元のoverride名()
}
```

###viewDidLoad
- viewDidLoadの中に書いたコードは、一番最初に実行される
- label.textに文字列を代入すると実際のラベルの内容が変化する
<img width="1493" alt="スクリーンショット 2018-01-02 20.56.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/192887/ea5e761d-b6ac-aa16-fffa-7526740796b8.png">

ちなみに、!(エクスクラメーションマーク)がついている意味はnullがあっていいかどうか、みたいな感じです。
参考：[【swift】変数によく付いている「！」や「？」（ビックリマーク・クエスチョンマーク）の説明](https://qiita.com/sasagin/items/0b255c790c4c3aecc630)


###private var
- varは変数
- letが定数

その前に、privateとか色々ついているものがありますが、こちらがとてもわかりやすいです。
簡単に言うとprivateは、同じソース内の定義っぽい？
参考：[Swift3 からのアクセスコントロール](https://qiita.com/hironytic/items/6cc68ca93b428ba9194e#swift-3%E3%81%8B%E3%82%89%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB)

#ボタンを押すたびに画像を変える

1. Assetsの中に画像をドラッグ&ドロップで入れておく
2. 画像をXcodeで使えるように定義する
　　var 任意変数名 = UIImage(named:"Assetsの中の画像名")!
2. 画像エリアを定義し、繋げる
　　ImageViewをcontrolを押しながらViewControllerまでつなげる
3. ボタンを繋げ、アクションを記述する



```swift
import UIKit

class ViewController: UIViewController {

    //画像を定義　これが2.
    //var 任意変数名 = UIImage(named:"Assetsの中の画像名")!
    var imgtr = UIImage(named:"daishi")!
    var img1 = UIImage(named:"db")!
    var img2 = UIImage(named:"trmr")!
    var img3 = UIImage(named:"daishi")!

    //countNum という値を作り、0から始まる旨を記す
    var countNum:Int = 0
    
    //画像エリア定義　これが3.
    @IBOutlet weak var daishi: UIImageView!
    @IBOutlet weak var stamp1: UIImageView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        daishi.image = imgtr

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //ボタンのアクション これが4.
    //ボタンを押すたびカウントが上がるようにし、そのカウントごとにif elseでイメージ表示
    //stamp1エリア定義.image = 画像の定義
    @IBAction func correct(_ sender: UIButton) {
        countNum += 1
        if countNum == 1 {
            stamp1.image = img1
        } else if countNum == 2 {
            stamp1.image = img2
        } else {
            stamp1.image = img3
        }
    }
}
```
絶対もっと美しい方法があるはず……


#画像処理
参考：[Swift画像処理の基礎知識 〜iOS標準の画像クラス・フレームワーク〜](https://qiita.com/jok/items/7c9e384abb29c161f56b)
参考：[【iOS】【swift】たった数行で画像のフィルタ/エフェクトが実現できる超便利フレームワークCoreImage](https://qiita.com/kitanoow/items/2fd1c6dc415d7af769db)



#参考文献
http://www.atmarkit.co.jp/ait/articles/1601/08/news059_3.html
http://stickpan.hatenablog.com/entry/2016/02/22/193940
https://prog-8.com/
http://iphone-tora.sakura.ne.jp/
https://qiita.com/hironytic/items/6cc68ca93b428ba9194e