Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHPerのためのSwift入門

5,623 views

Published on

第87回 PHP勉強会@東京 の発表資料です。
https://phpstudy.doorkeeper.jp/events/20806

Published in: Software
  • Sex in your area is here: ❤❤❤ http://bit.ly/2F90ZZC ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2F90ZZC ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

PHPerのためのSwift入門

  1. 1. PHPerのためのSwift入門 デジタルサーカス(株)長谷川智希
  2. 2. ⾃自⼰己紹介 長谷川智希 / デジタルサーカス(株) 副団長CTO とも き @tomzoh
 とむぞう iOS Swift Coming Soon 開発系趣味 その他趣味 iOSアプリ開発, Web開発 趣味のプログラム レンタルカートレース, 電子工作(mbed), … TOMZOH
  3. 3. デジタルサーカス(株) ・ Webサイト受託開発 ・ スマホアプリ受託開発 ・ 自社サービス (PHP, Drupal, CakePHP) (iOS, Android) (http://appbuilder.jp) Twitter: @tomzoh
  4. 4. Twitter: @tomzoh
  5. 5. 今日のテーマ: PHPerのためのSwift入門
  6. 6. iOS開発の開発言語
  7. 7. Objective-C
  8. 8. Objective-C - (void)viewDidLoad { [super viewDidLoad]; MonsterList* ml = [[MonsterList alloc] initWithListName:@"EVOLUTION"]; NSMutableArray* evolutionIds = [[NSMutableArray alloc] init]; for (NSDictionary* item in ml.items){ if (! [[item allKeys] containsObject:@"evolution_id"]){ continue; } [evolutionIds addObject:item[@"evolution_id"]]; } _materials = [DBUtil evolutionMaterialsWithEvolutionIds:evolutionIds]; self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0); }
  9. 9. Objective-C - (void)viewDidLoad { [super viewDidLoad]; MonsterList* ml = [[MonsterList alloc] initWithListName:@"EVOLUTION"]; NSMutableArray* evolutionIds = [[NSMutableArray alloc] init]; for (NSDictionary* item in ml.items){ if (! [[item allKeys] containsObject:@"evolution_id"]){ continue; } [evolutionIds addObject:item[@"evolution_id"]]; } _materials = [DBUtil evolutionMaterialsWithEvolutionIds:evolutionIds]; self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0); } 何コレ
  10. 10. Objective-C - (void)viewDidLoad { [super viewDidLoad]; MonsterList* ml = [[MonsterList alloc] initWithListName:@"EVOLUTION"]; NSMutableArray* evolutionIds = [[NSMutableArray alloc] init]; for (NSDictionary* item in ml.items){ if (! [[item allKeys] containsObject:@"evolution_id"]){ continue; } [evolutionIds addObject:item[@"evolution_id"]]; } _materials = [DBUtil evolutionMaterialsWithEvolutionIds:evolutionIds]; self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0); } 何コレ キモい
  11. 11. Objective-C - (void)viewDidLoad { [super viewDidLoad]; MonsterList* ml = [[MonsterList alloc] initWithListName:@"EVOLUTION"]; NSMutableArray* evolutionIds = [[NSMutableArray alloc] init]; for (NSDictionary* item in ml.items){ if (! [[item allKeys] containsObject:@"evolution_id"]){ continue; } [evolutionIds addObject:item[@"evolution_id"]]; } _materials = [DBUtil evolutionMaterialsWithEvolutionIds:evolutionIds]; self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0); } めんどい 何コレ キモい
  12. 12. Objective-C - (void)viewDidLoad { [super viewDidLoad]; MonsterList* ml = [[MonsterList alloc] initWithListName:@"EVOLUTION"]; NSMutableArray* evolutionIds = [[NSMutableArray alloc] init]; for (NSDictionary* item in ml.items){ if (! [[item allKeys] containsObject:@"evolution_id"]){ continue; } [evolutionIds addObject:item[@"evolution_id"]]; } _materials = [DBUtil evolutionMaterialsWithEvolutionIds:evolutionIds]; self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0); } めんどい 何コレ キモい 難儀!
  13. 13. WWDC2014 Swift登場!
  14. 14. Swift override func viewDidLoad() { super.viewDidLoad() var ml = MonsterList(name: "EVOLUTION") var evolutionIds = Array<Int>() for item in ml.items { if let id = item["evolution_id"] { evolutionIds.append(id) } } _materials = DBUtil.evolutionMaterials(evolutionIds) }
  15. 15. Swift override func viewDidLoad() { super.viewDidLoad() var ml = MonsterList(name: "EVOLUTION") var evolutionIds = Array<Int>() for item in ml.items { if let id = item["evolution_id"] { evolutionIds.append(id) } } _materials = DBUtil.evolutionMaterials(evolutionIds) } ですよねー
  16. 16. Swift override func viewDidLoad() { super.viewDidLoad() var ml = MonsterList(name: "EVOLUTION") var evolutionIds = Array<Int>() for item in ml.items { if let id = item["evolution_id"] { evolutionIds.append(id) } } _materials = DBUtil.evolutionMaterials(evolutionIds) } ですよねー ですよねー
  17. 17. Swift override func viewDidLoad() { super.viewDidLoad() var ml = MonsterList(name: "EVOLUTION") var evolutionIds = Array<Int>() for item in ml.items { if let id = item["evolution_id"] { evolutionIds.append(id) } } _materials = DBUtil.evolutionMaterials(evolutionIds) } ですよねー ですよねー ですよねー
  18. 18. Swift override func viewDidLoad() { super.viewDidLoad() var ml = MonsterList(name: "EVOLUTION") var evolutionIds = Array<Int>() for item in ml.items { if let id = item["evolution_id"] { evolutionIds.append(id) } } _materials = DBUtil.evolutionMaterials(evolutionIds) } ですよねー 普通! ですよねー ですよねー
  19. 19. 「PHPerのための」Swift入門
  20. 20. Swift、PHPerにオススメ
  21. 21. 変数 int foo = 3 Objective-C 型推測
  22. 22. 変数 int foo = 3 var foo: int = 3 Objective-C Swift 型推測
  23. 23. 変数 int foo = 3 var foo: int = 3 var foo = 3 Objective-C Swift 型推測 型推測
  24. 24. 変数 定数 int foo = 3 var foo: int = 3 NSString* const it = @ go var foo = 3 Objective-C Swift Objective-C 型推測 型推測
  25. 25. 変数 定数 int foo = 3 var foo: int = 3 NSString* const it = @ go var foo = 3 Objective-C Swift Objective-C Swift 型推測 型推測
  26. 26. 変数 定数 int foo = 3 var foo: int = 3 NSString* const it = @ go let var foo = 3 Objective-C Swift Objective-C Swift 型推測 型推測
  27. 27. 変数 定数 int foo = 3 var foo: int = 3 NSString* const it = @ go let var foo = 3 Objective-C Swift Objective-C Swift 型推測 型推測 it =
  28. 28. 変数 定数 int foo = 3 var foo: int = 3 NSString* const it = @ go let var foo = 3 Objective-C Swift Objective-C Swift 型推測 型推測 it = go
  29. 29. 「型とか評価値、分かってるんだよね」感。 PHP $items = $this->Item->find(‘all') if (count($items) > 0){ echo $items[0][“name”]; }
  30. 30. if ($items = $this->Item->find('all')){ echo $items[0][“name”]; } 「型とか評価値、分かってるんだよね」感。 PHP $items = $this->Item->find(‘all') if (count($items) > 0){ echo $items[0][“name”]; }
  31. 31. if ($items = $this->Item->find('all')){ echo $items[0][“name”]; } 「型とか評価値、分かってるんだよね」感。 PHP 配列は要素数が0ならfalse, 1以上ならtrue扱いって「分かってる」 $items = $this->Item->find(‘all') if (count($items) > 0){ echo $items[0][“name”]; }
  32. 32. if ($items = $this->Item->find('all')){ echo $items[0][“name”]; } 「型とか評価値、分かってるんだよね」感。 PHP 配列は要素数が0ならfalse, 1以上ならtrue扱いって「分かってる」 シンプルに省略 $items = $this->Item->find(‘all') if (count($items) > 0){ echo $items[0][“name”]; }
  33. 33. 「型とか評価値、分かってるんだよね」感。 Swift let food: [String: [String]] = items.find(‘all’) let count = food[“主食”]?.count
  34. 34. 「型とか評価値、分かってるんだよね」感。 Swift let food: [String: [String]] = items.find(‘all’) let count = food[“主食”]?.count $food = [ "主食" => [“米”, “パスタ”, “パン”], "スープ" => [“味 汁”, “コンソメ”] ] PHPで書くとこんなイメージの定義
  35. 35. 「型とか評価値、分かってるんだよね」感。 Swift let food: [String: [String]] = items.find(‘all’) let count = food[“主食”]?.count
  36. 36. 「型とか評価値、分かってるんだよね」感。 Swift let food: [String: [String]] = items.find(‘all’) let count = food[“主食”]?.count let count = items.find(‘all’)[“主食”]?.count
  37. 37. 「型とか評価値、分かってるんだよね」感。 Swift let food: [String: [String]] = items.find(‘all’) let count = food[“主食”]?.count let count = items.find(‘all’)[“主食”]?.count items.find()の返値が[String: [String]] だって「分かってる」
  38. 38. 「型とか評価値、分かってるんだよね」感。 Swift let food: [String: [String]] = items.find(‘all’) let count = food[“主食”]?.count let count = items.find(‘all’)[“主食”]?.count items.find()の返値が[String: [String]] だって「分かってる」 シンプルに省略
  39. 39. トレイリング 「 , 」 PHP $foods = [ "curry" => "カレー", "onigiri" => "おにぎり", "ramen" => "ラーメン", ]
  40. 40. トレイリング 「 , 」 PHP $foods = [ "curry" => "カレー", "onigiri" => "おにぎり", "ramen" => "ラーメン", ]
  41. 41. トレイリング 「 , 」 PHP Swift $foods = [ "curry" => "カレー", "onigiri" => "おにぎり", "ramen" => "ラーメン", ] var foods = [ "curry" : "カレー", "onigiri" : "おにぎり", "ramen" : "ラーメン", ]
  42. 42. トレイリング 「 , 」 PHP Swift $foods = [ "curry" => "カレー", "onigiri" => "おにぎり", "ramen" => "ラーメン", ] var foods = [ "curry" : "カレー", "onigiri" : "おにぎり", "ramen" : "ラーメン", ]
  43. 43. join / split PHP $elements = split(",", "a, b, c"); $string = join(",", $elements);
  44. 44. join / split PHP Swift $elements = split(",", "a, b, c"); $string = join(",", $elements);
  45. 45. join / split PHP Swift let elements = split("a,b,c", { $0 == ","}) let string = join(",", elements) $elements = split(",", "a, b, c"); $string = join(",", $elements);
  46. 46. 多言語とPHPを行き来して 「ああ…らくちん」と思うポイントが Swiftにも生きてる。
  47. 47. あ、あと…
  48. 48. Swiftも参照カウント方式です。 でも、循環参照は回収されません。
  49. 49. Swift PHPerにオススメ!
  50. 50. iOSアプリの開発環境 必須 Mac OS X 10.9.4以降 必須 Xcode Apple Developerに登録(無料)すればダウンロード可能。 必須 Objective-C or Swift どちらか一方、または両方を使用。 任意 iOS Developer Program & iOS実機 実機デバッグや、AppStore公開するなら必要。 ¥11,800/年
  51. 51. iOS開発、やってみよう!
  52. 52. Enjoy Swift!!
  53. 53. ありがとうございました。 @tomzoh 人材募集中!
 PHP, Drupal, スマホ… デジタルサーカス(株)

×