completion: {done in }

経緯

xcodeのpage-based-applicationのサンプルに以下のコードがあり、

self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: {done in })

「completion: {done in }」がよくわからなかったので調べていた

結論

  1. bool値を受け取って何か処理をするためのクロージャ
  2. メソッドの定義元を読みましょう
  3. 変数doneはhogeでもfugaでもなんでもいい(クロージャなので)

UIPageViewController

func setViewControllers(viewControllers: [AnyObject]!, direction: UIPageViewControllerNavigationDirection, animated: Bool, completion: ((Bool) -> Void)!)

残件

このcompletion引数をどう使ったらいいのかまだわかっていない

補足

tiny-wing.hatenablog.com

class 'ViewController' has no initializers

状況

class ViewController: UIViewController {
    var 記事データ:記事
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
    }
}

解決

class ViewController: UIViewController {
    var 記事データ:記事?
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
    }
}

説明

ViewControllerクラスがnewされる際に、プロパティに値が設定されておらずかつnilが許容されていなかったため。
「?」をつけることによってプロパティにnilを許容し解決とした。

【読書記録】「即判断」する人は、なぜ成功するのか?(1)

「即判断」する人は、なぜ成功するのか?

「即判断」する人は、なぜ成功するのか?

それは、一流の判断力を身につけている人は失敗を恐れず行動するが、身につけていない人は失敗しないように行動する、という違いです

素早く失敗しよう

なぜなら、失敗しない行動というのは、周囲の評価を気にした行動であり、知らず知らずのうちに自分の行動範囲を小さくしているからです

その経験とは、「意思決定」を重ねる、というものです

最適解を求め続ける訓練が必要

・意思決定=最適な選択肢を求める行為 ・判断=複数の意思決定候補から、最適なものを見極めて決定する行為

このあとも「意思決定」という言葉は出てくるので、抑えておく。

ですから、意思決定力がないと、判断の精度も低下する、ということがいえます。  本書では意思決定する力も含めて「判断力」と定義しています

つまり現代は、非常に判断が難しい社会になっているのです

実感として比較できないにもかかわらず、自分の中にもそういう感覚はある

その要因としては次の2つがあげられます。 1.選択肢が激増した社会環境(外部要因) 2.失敗に対する不安感の増加(内部要因)

選択肢が多くなればなるほど考える時間が多くなるので判断が遅くなるというロジックはある

でも私からすると、情報過多で選択肢も多いいまこそ、じつは最も意思決定し、判断しやすい状況といえます。なぜなら、リスクを取って少しでも速く意思決定するだけで、より大きなリターンを得られるようになったからです

意思決定の難易度が上がっているので少しばかり正確でなくとも決定して進めてしまった方がリターンが出るというのは理解できる

情報が多く判断力のある人が減っているからこそ、新しい価値を生み出す人が重宝され、成長しやすい時代になっています

ギャップの中に価値は生まれる

まず覚えておいてほしいことは、リスクには2種類あるということです。  簡単に言うと、「やるリスク」と「やらないリスク」の2つです

「やるリスク」というのは、すべての情報が集まっていない段階で行動を起こす際に生じるリスクのことで
一方、「やらないリスク」というのは、すぐに判断しないことによるリスクです

この表現だとMECEでないように見える

重要なのはどのような状況であれ、「やるリスク」より「やらないリスク」のほうがはるかに大きいということです

その理由は、決断することによって得られる「果実」は想像以上に大きく、決断を引き延ばすことによって得られる果実は想像以上に小さいからです

ほんとに?
この点についての根拠は書かれていない。

一方、「やるリスク」を取らずに判断を先送りにした人にはデメリットしかありません

「やるリスク」を取った場合のデメリットが書かれていない。
やるとやらないの分水嶺を具体的に書いてほしかった。

この意思決定がスムーズにできれば実のあるドラフトができ、一方で意思決定が遅いとどんどんいい選手を先に取られ、有望選手を獲得できないだけでなく、育成プログラムやグッズ販売にも影響を及ぼしかねません

ここに意思決定のスピードが殊更関係ある理由を示してほしい。
ドラフトについて自分の知識が足りていないだけかもしれない。
ドラフトって選手に営業かけるんだっけ?

「即判断」する人は、なぜ成功するのか?

「即判断」する人は、なぜ成功するのか?

delegateパターン

結論:delegateパターンを使うことによって、クラスAで実行するメソッドの処理をクラスBに委譲することができる

参考:

www.sirochro.com

Objectiv-Cのプロトコル

プロトコルとは、ある機能に必要なメソッド宣言をまとめたもの



具体例。画面をタッチした時の処理をまとめたもの。
cocos2dのソースです(CCTargetedTouchDelegate.h)。

@protocol CCTargetedTouchDelegate <NSObject>

/** Return YES to claim the touch.
 @since v0.8
 */
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional
// touch updates:
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
@end

注意点は「@optional」。
この記述以下のメソッドは実装しなくても良い。
つまり上の例では、「ccTouchBegan」は実装必須だが、
「ccTouchMoved」「ccTouchEnded」「ccTouchCancelled」は必須ではない。


使用例。ヘッダファイル。

@interface AkasanSprite : CCSprite
<CCTargetedTouchDelegate>
{
}
@end

さらに、メインファイルに実装を書く。

ブロックオブジェクト

Cocos2dいじってて「^」記号(サーカムフレックス)がついた関数めいたものがあったので調査。

結論:ブロックオブジェクトとは、Objective-Cにおけるクロージャ

以下、詳解Objective-C2.0(340-342p)より。


構文。

^(引数列) {本体}



具体例。

詳解 Objective-C 2.0 第3版

詳解 Objective-C 2.0 第3版