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

PHPerのためのSwift入門