SlideShare a Scribd company logo
PHPerのためのSwift入門
デジタルサーカス(株)長谷川智希
⾃自⼰己紹介
長谷川智希 / デジタルサーカス(株) 副団長CTO
とも き
@tomzoh

とむぞう
iOS Swift
Coming
Soon
開発系趣味
その他趣味
iOSアプリ開発, Web開発 趣味のプログラム
レンタルカートレース, 電子工作(mbed), …
TOMZOH
デジタルサーカス(株)
・ Webサイト受託開発
・ スマホアプリ受託開発
・ 自社サービス
(PHP, Drupal, CakePHP)
(iOS, Android)
(http://appbuilder.jp)
Twitter: @tomzoh
Twitter: @tomzoh
今日のテーマ:
PHPerのためのSwift入門
iOS開発の開発言語
Objective-C
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);
}
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);
}
何コレ
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);
}
何コレ
キモい
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);
}
めんどい
何コレ
キモい
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);
}
めんどい
何コレ
キモい
難儀!
WWDC2014 Swift登場!
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)
}
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)
}
ですよねー
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)
}
ですよねー
ですよねー
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)
}
ですよねー
ですよねー
ですよねー
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)
}
ですよねー
普通!
ですよねー
ですよねー
「PHPerのための」Swift入門
Swift、PHPerにオススメ
変数
int foo = 3
Objective-C
型推測
変数
int foo = 3 var foo: int = 3
Objective-C Swift
型推測
変数
int foo = 3 var foo: int = 3
var foo = 3
Objective-C Swift
型推測
型推測
変数
定数
int foo = 3 var foo: int = 3
NSString* const it = @ go
var foo = 3
Objective-C Swift
Objective-C
型推測
型推測
変数
定数
int foo = 3 var foo: int = 3
NSString* const it = @ go
var foo = 3
Objective-C Swift
Objective-C Swift
型推測
型推測
変数
定数
int foo = 3 var foo: int = 3
NSString* const it = @ go let
var foo = 3
Objective-C Swift
Objective-C Swift
型推測
型推測
変数
定数
int foo = 3 var foo: int = 3
NSString* const it = @ go let
var foo = 3
Objective-C Swift
Objective-C Swift
型推測
型推測
it =
変数
定数
int foo = 3 var foo: int = 3
NSString* const it = @ go let
var foo = 3
Objective-C Swift
Objective-C Swift
型推測
型推測
it = go
「型とか評価値、分かってるんだよね」感。
PHP
$items = $this->Item->find(‘all')
if (count($items) > 0){
echo $items[0][“name”];
}
if ($items = $this->Item->find('all')){
echo $items[0][“name”];
}
「型とか評価値、分かってるんだよね」感。
PHP
$items = $this->Item->find(‘all')
if (count($items) > 0){
echo $items[0][“name”];
}
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”];
}
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”];
}
「型とか評価値、分かってるんだよね」感。
Swift
let food: [String: [String]] = items.find(‘all’)
let count = food[“主食”]?.count
「型とか評価値、分かってるんだよね」感。
Swift
let food: [String: [String]] = items.find(‘all’)
let count = food[“主食”]?.count
$food = [
"主食" => [“米”, “パスタ”, “パン”],
"スープ" => [“味 汁”, “コンソメ”]
]
PHPで書くとこんなイメージの定義
「型とか評価値、分かってるんだよね」感。
Swift
let food: [String: [String]] = items.find(‘all’)
let count = food[“主食”]?.count
「型とか評価値、分かってるんだよね」感。
Swift
let food: [String: [String]] = items.find(‘all’)
let count = food[“主食”]?.count
let count = items.find(‘all’)[“主食”]?.count
「型とか評価値、分かってるんだよね」感。
Swift
let food: [String: [String]] = items.find(‘all’)
let count = food[“主食”]?.count
let count = items.find(‘all’)[“主食”]?.count
items.find()の返値が[String: [String]]
だって「分かってる」
「型とか評価値、分かってるんだよね」感。
Swift
let food: [String: [String]] = items.find(‘all’)
let count = food[“主食”]?.count
let count = items.find(‘all’)[“主食”]?.count
items.find()の返値が[String: [String]]
だって「分かってる」
シンプルに省略
トレイリング 「 , 」
PHP
$foods = [
"curry" => "カレー",
"onigiri" => "おにぎり",
"ramen" => "ラーメン",
]
トレイリング 「 , 」
PHP
$foods = [
"curry" => "カレー",
"onigiri" => "おにぎり",
"ramen" => "ラーメン",
]
トレイリング 「 , 」
PHP Swift
$foods = [
"curry" => "カレー",
"onigiri" => "おにぎり",
"ramen" => "ラーメン",
]
var foods = [
"curry" : "カレー",
"onigiri" : "おにぎり",
"ramen" : "ラーメン",
]
トレイリング 「 , 」
PHP Swift
$foods = [
"curry" => "カレー",
"onigiri" => "おにぎり",
"ramen" => "ラーメン",
]
var foods = [
"curry" : "カレー",
"onigiri" : "おにぎり",
"ramen" : "ラーメン",
]
join / split
PHP
$elements = split(",", "a, b, c");
$string = join(",", $elements);
join / split
PHP
Swift
$elements = split(",", "a, b, c");
$string = join(",", $elements);
join / split
PHP
Swift
let elements = split("a,b,c", { $0 == ","})
let string = join(",", elements)
$elements = split(",", "a, b, c");
$string = join(",", $elements);
多言語とPHPを行き来して
「ああ…らくちん」と思うポイントが
Swiftにも生きてる。
あ、あと…
Swiftも参照カウント方式です。
でも、循環参照は回収されません。
Swift
PHPerにオススメ!
iOSアプリの開発環境
必須 Mac
OS X 10.9.4以降
必須 Xcode
Apple Developerに登録(無料)すればダウンロード可能。
必須 Objective-C or Swift
どちらか一方、または両方を使用。
任意 iOS Developer Program & iOS実機
実機デバッグや、AppStore公開するなら必要。
¥11,800/年
iOS開発、やってみよう!
Enjoy Swift!!
ありがとうございました。
@tomzoh
人材募集中!

PHP, Drupal, スマホ…
デジタルサーカス(株)

More Related Content

PPTX
ブログメディアにおけるData APIの活用について
PDF
Ruby 同好会宣言
PDF
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
PDF
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
PDF
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
PDF
2012 keynote-2
PDF
jQuery勉強会#2
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
ブログメディアにおけるData APIの活用について
Ruby 同好会宣言
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
2012 keynote-2
jQuery勉強会#2
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト

What's hot (13)

PDF
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
PDF
PHP classの教室
PDF
swooleを試してみた
PDF
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
PDF
Developments in The Qt WebKit Integration
PPTX
CakePHP+Smartyハイブリッドによるラクラク開発
PDF
⽇本語全⽂検索
PPTX
Tritonn から Elasticsearch への移行話
PDF
「Html sql」で図書館hpにアクセスしてみよう
PDF
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
PDF
プロになるためのJavaScript入門読書会 レジュメ
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
PDF
40分濃縮 PHP classの教室
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
PHP classの教室
swooleを試してみた
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Developments in The Qt WebKit Integration
CakePHP+Smartyハイブリッドによるラクラク開発
⽇本語全⽂検索
Tritonn から Elasticsearch への移行話
「Html sql」で図書館hpにアクセスしてみよう
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
プロになるためのJavaScript入門読書会 レジュメ
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
40分濃縮 PHP classの教室
Ad

Viewers also liked (6)

PDF
Memento: Updated technical details (May 2011)
PDF
今日から業務で使える17の運用系Linuxツール、そして円環の理
PPTX
Wireshark入門(3)
PDF
ご注文は監視自動化ですか?
PPTX
さくらのVPSに来る悪い人を観察する その2
PDF
要注意!?効果の出ない技術研修に共通する3つのこと
Memento: Updated technical details (May 2011)
今日から業務で使える17の運用系Linuxツール、そして円環の理
Wireshark入門(3)
ご注文は監視自動化ですか?
さくらのVPSに来る悪い人を観察する その2
要注意!?効果の出ない技術研修に共通する3つのこと
Ad

Similar to PHPerのためのSwift入門 (20)

PPTX
学生向けAndroid勉強会(入門編)
PPTX
Deep dive into oss written in swift
PPTX
Deep dive into oss written in swift
PDF
[東京] JapanSharePointGroup 勉強会 #2
PDF
WordPressで始めるphp入門
PDF
CoffeeScript
PDF
初めての Data api cms どうでしょう - 大阪夏の陣
PDF
Scala with DDD
PDF
PDF
AWS SDK for Smalltalk
PDF
F#入門 ~関数プログラミングとは何か~
PDF
jQuery超入門編
PDF
速くなければスマフォじゃない - インターンバージョン-
PDF
初めての Data api
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
PDF
初めての Data API CMS どうでしょう - 仙台編 -
PDF
Data apiで実現 進化するwebの世界
PDF
勉強会force#4 Chatter Integration
PDF
AWS SDK for Haskell開発
PDF
20110714 j queryベーシック
学生向けAndroid勉強会(入門編)
Deep dive into oss written in swift
Deep dive into oss written in swift
[東京] JapanSharePointGroup 勉強会 #2
WordPressで始めるphp入門
CoffeeScript
初めての Data api cms どうでしょう - 大阪夏の陣
Scala with DDD
AWS SDK for Smalltalk
F#入門 ~関数プログラミングとは何か~
jQuery超入門編
速くなければスマフォじゃない - インターンバージョン-
初めての Data api
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
初めての Data API CMS どうでしょう - 仙台編 -
Data apiで実現 進化するwebの世界
勉強会force#4 Chatter Integration
AWS SDK for Haskell開発
20110714 j queryベーシック

More from Tomoki Hasegawa (20)

PDF
Reading php terminal-gameboy-emulator
PDF
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
PDF
とある受託ベンダの開発環境
PDF
iOS Developers Conference Japan 2016
PDF
エンジニアのお祭り
PDF
勉強会のこちら側とあちら側
PDF
tvOSでWebSocketを使う
PDF
「これを買っている人はこれも買っています」実装してみた PHP side
PDF
tvOSネイティブアプリを作る
PDF
「これを買っている人はこれも買っています」実装してみた
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
PDF
TestFlightみたいなのを自作する
PDF
PHPでスマホアプリにプッシュ通知する
PDF
Stargazer Meetup #1
PDF
PUSH通知証明書作成ツールを作った
PDF
PHPカンファレンス福岡に 行ってきた
PDF
CakePHP3ウォークスルー
PDF
はじめてのiOSアプリ開発 Swift対応版
PDF
AppStore申請を一式まるっと自動化する
PDF
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
Reading php terminal-gameboy-emulator
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
とある受託ベンダの開発環境
iOS Developers Conference Japan 2016
エンジニアのお祭り
勉強会のこちら側とあちら側
tvOSでWebSocketを使う
「これを買っている人はこれも買っています」実装してみた PHP side
tvOSネイティブアプリを作る
「これを買っている人はこれも買っています」実装してみた
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
TestFlightみたいなのを自作する
PHPでスマホアプリにプッシュ通知する
Stargazer Meetup #1
PUSH通知証明書作成ツールを作った
PHPカンファレンス福岡に 行ってきた
CakePHP3ウォークスルー
はじめてのiOSアプリ開発 Swift対応版
AppStore申請を一式まるっと自動化する
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版

PHPerのためのSwift入門