プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

すぐできる!SwiftでのUITableViewの使い方

f:id:takanori5:20171017103942p:plain

 

上記のようなUIはUITableViewを使って実現されています。

Lineのトークの一覧にも利用されていますね。

 

私がSwiftを始めたばかりの頃は、本やいろんなサイトを見ながらこのUITableViewをなんとか使えるようになりましたが

無駄に時間がかかったので簡単にまとめておきます。

 

UITableViewとは

情報をリスト表示したい時に使います。

 

そして1つの項目を表示する領域を「セル」と言います。
セルには、UITableViewCellというものを使用します。

 

使い方

大きくやることは以下の3つ!!

  1. storyboardにUITableViewとUITableViewCellを配置します
  2. UITableViewとUITableViewCellに情報を受け渡す設定
  3. ViewControllerに必要なメソッドを書く

 

セルをView Controller内で使用出来るように設定しておく

Table View Cellを選択し、右側の「Show the Attributes inspector」という項目を選択します。

ここの「Identifier」という項目にセルの識別子を付けます。

 

上記の設定が済んだら後はコードをどんどん書いていきます!

 

 ViewControllerの編集

ここでやること

  1. 表示するための変数(配列)を定義
  2. UITableViewDelegateとUITableViewDataSourceを実装
  3. デリゲートメソッドとデータソースメソッドを定義
  4. 変数の内容が表示されるようにする

1.は配列を定義するだけ

 

2.は以下のように実装

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

 

ここまで記述するとエラーが起きます。

これは3.のdelegate datasourceを実装すれば解消されます。

 

3.

/// セルの個数を指定するデリゲートメソッド(必須)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 0
}
 
/// セルに値を設定するデータソースメソッド(必須)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
 
    return UITableViewCell()
}
 
/// セルが選択された時に呼ばれるデリゲートメソッド
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
 
4.
では変数の値が表示されるようにしましょう!1.で用意した配列のカウントを返します。
このメソッドには表示するセルの個数を指定する
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return array.count
}
 
次は値の設定です。
11
/// セルに値を設定するデータソースメソッド(必須)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
 
    // セルを取得する
    let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("(identifireに設定した値)", forIndexPath: indexPath)
 
    // セルに表示する値を設定する
    cell.textLabel!.text = fruits[indexPath.row]
 
    return cell
}

 

 storyboardでTable View CellのIdentifierに設定した値を入れる必要がある

 

 

takanori5.hatenablog.com

   

eclipseのパッケージエクスプローラーの表示を見やすく変更する<文系エンジニアのプログラミング>

パッケージエクスプローラーの表示方法は階層表示に変更することが可能です。

格段に見やすくなるためお勧め。

 

1.Eclipseのパッケージエクスプローラー上部ツールバーの右端の下三角(▽)をクリック
2.「パッケージ・プレゼンテーション」→「階層(H)」を選択

 

 

git deletedファイルを元に戻す<ゼロからのgit入門>

$ git checkout HEAD -- 消したファイル名

 

誤って必要なファイルを削除してしまった場合、上記コマンドで削除されたファイルを元の状態に戻せます。

 

 

◆git関連

takanori5.hatenablog.com

エンジニアのためのGitの教科書 実践で使える! バージョン管理とチーム開発手法 (WEB Engineer’s Books)

新品価格
¥2,376から
(2017/1/28 19:21時点)

コールバック関数は汎用化に最適!<JavaScript勉強中>

配列に対して、

・値を取り出して1ずつ足すという処理

・値を取り出して2乗じるという処理

 

以下の二つの関数を定義したい場合にコールバックを使わずにそれぞれ実装すると以下のように実装できます。

 

var a = [1, 2, 3, 4, 5];

//1ずつ足す関数

function addOne() {

  var resultArray = ;

  for (var i = 0; i< a.length; i++){

    r[i] = a[i] +1;

  }

}

 

//2乗じる関数

function multiTwo() {

  var resultArray = ;

  for (var i = 0; i< a.length; i++){

    r[i] = a[i] * 2;

  }

}

 

for文の中の要素に対して+1するか*2するかの部分しか処理が異なりません。

これはコールバック関数を利用することで以下のように汎用化可能です!

 

var a = [1, 2, 3, 4, 5];

//汎用化部分(コールバック関数fで切り替え)

function _map(f, a) {

  var resultArray = [];

  for (var i = 0; i< a.length; i++){
    resultArray[i] = f(a[i]);
  }
  return resultArray;

}

 

var addOne = function (x){return x +1;};

//1ずつ足す関数

function mapAddOne(a) {
  return _map(addOne, a)
}
b = mapAddOne(a);

 

var multiTwo = function (x){return x *2;};

function mapmultiTwo(a) {
  return _map(addOne, a)
}
b = mapAddOne(a);

console.log(b);

コールバック関数を理解する<JavaScript勉強中>

コールバック関数とは何か

コールバックとは、ある処理に対して別の処理を呼び出すように指定することを指します。

ある処理をトリガーに別の処理を呼び出すことです。

GUIプログラミングでよく利用されるようです。例えばボタンが押されたという処理をトリガーにコールバック関数を呼び出すといった感じ。

 

まずは普通に関数を使って面積計算してみます。

var squere = {
  width : 100,
  hight : 50
}

function calc(squere) {
  return squere.width * squere.hight;
}
console.log(calc(squere));//5000

 

上記のfunction以下をcallbackにしてみます。

 

function calcCall(squere, f) {
var calc = squere.width * squere.hight;
f(calc);
}
calcCall(squere, function(calc){console.log(calc)});//5000

 

コールバックでは、面積を計算する処理をトリガーにコンソールにログを出しています。

引数に渡すコールバック関数fを変えることで柔軟に処理の内容を変更できます

 

上記の簡単な例ではコールバックを使う必要がないですが、javascriptの組みこみ関数では普通にコールバック関数が使われているので覚えておく必要があります!

クロージャを使ってみる<JavaScript勉強中>

javascriptでは無名関数クロージャを定義できます。

 

クロージャの定義の仕方

1.関数の中に関数をつくる

2.外側の関数のスコープ内に変数を定義する

3.内側の関数から2で定義した変数を参照する

4.関数の中で入れ子になった関数内関数を戻り値で返す

 

面倒臭いですね。。

 

試しに使ってみます!!

function outer() {
  var a = 2;
  var inner = function() {
    return a; 
 }
}

var func = outer();
var result = func();
console.log(result); //2

 

クロージャを利用するメリット

なぜこんなに面倒な手順を踏んでまでクロージャを利用するのか当初は意味不明でした。

クロージャを利用することで得られるメリットは二つです。

1.グローバル変数を使わなくて済む

通常の関数では、関数の呼び出しが終わると、その関数のスコープ内で使われていたローカル変数の値は消えてしまい、次の呼び出し時に使うことはできません。

この対処法としてグローバル変数を定義しておき、そこで値を保持することで対処します。

ただし、グローバル変数はどこからでもアクセスできるため意図しない改ざんが起こりえます。

クロージャを利用することでグローバル変数を定義せずにローカル変数の値を保持することが可能となります。

 

2.関数を動的に生成できる。

クロージャは入れ子になった関数を使って定義します。

この時外側の関数は、関数を作り出すための関数と見なせ、外側の関数に渡す引数に応じて、パラメータのことなる様々な関数が生み出せます。

 

 

 

nodebrew install が失敗する

nodebrew install-binary latestを実行

|ターミナル|

Warning: Failed to create the file

Warning: /Users/hodzumitakanori/.nodebrew/src/v7.7.2/node-v7.7.2-darwin-x64.tar

Warning: .gz: No such file or directory

||<

mkdirをすれば解決!

|ターミナル|

hodzumitakanori-no-MacBook-Air:~ hodzumitakanori$ mkdir ~/.nodebrew

hodzumitakanori-no-MacBook-Air:~ hodzumitakanori$ mkdir ~/.nodebrew/src

hodzumitakanori-no-MacBook-Air:~ hodzumitakanori$ nodebrew install-binary v7.7.2

||<

################################################################## 100.0%

Installed successfully