Swift 配列 Array
書式
var 配列名 = [値1, 値2, 値3] var 配列名:[値の型] = [値1, 値2, 値3] // 型指定 var 配列名:Array<値の型> = [値1, 値2, 値3] // 関数の定義などで使う型指定 // 多次元配列 var 配列名 = [値A[値1, 値2, 値3], 値B[値1, 値2, 値3] ]
空の配列
指定した型で初期化される
var strArray = [String]() // 配列が空かチェック if strArray.isEmpty { // 空の配列 } else { }
配列の値の個数
count
var intArray = [10, 20, 30, 40] intArray.count // 結果:4
配列を同じ値で初期化
repeatedValue
var zeroList = [Double](count:3, repeatedValue:0.0) // 結果:[0.0, 0.0, 0.0]
配列に値を追加・挿入・削除
append
insert
removeAtIndex, removeLast, removeAll
var intArray = [10, 20, 30] // 追加 intArray.append(40) // 結果:[10, 20, 30, 40] // 挿入 intArray.insert(25, atIndex: 2) // 結果:[10, 20, 25, 30, 40] // 指定した位置の値を削除 intArray.removeAtIndex(2) // 結果:[10, 20, 30, 40] // 最後の値を削除 intArray.removeLast() // 結果:[10, 20, 30] // 全てを削除 intArray.removeAll(keepCapacity: false) // 結果:0 elements ※引数省略はfalse
配列の値にアクセス
インデックスは0から
レンジ演算子で連続した範囲へのアクセスもできる
var intArray = [10, 20, 30] // インデックスでアクセス var int1 = intArray[0] // 結果:10 var newArray = intArray[0...1] // 結果 [10, 20] // 代入 intArray[0] = 11 // 結果:[11, 20, 30] intArray[1...2] = [22, 33] // 結果:[11, 22, 33] // コピー(代入は参照では無く複製される) var newArray2 = intArray // 結果:[11, 20, 30] // 多次元配列へアクセス var nestArray = [[10 ,20, 30], [40 ,50, 60], [70 ,80, 90]] var int2 = nestArray[0][0] // 結果:10 // インデックス番号と値を取り出す for (index, value) in enumerate(intArray) { println((index, value)) // 結果:(0, 11) (1, 20) (2, 30) } // 最初の値を取り出す intArray.first // 最後の値を取り出す intArray.last
配列の値をあつかう
// 配列と配列を連結 var strArray1 = ["aaa", "bbb"] var strArray2 = strArray1 + ["ccc", "ddd"] // 値を逆順に並べる intArray.reverse() // 値をソートする intArray.sort {$0<$1} // 昇順 intArray.sort {$0>$1} // 降順 // ストリングをabc順にする strArray.sorted { $0.uppercaseString < $1.uppercaseString // 大文字に変換して比較 } // 値を抽出する var filterArray = intArray.filter {$0 >= 30 && $0 <= 40} // 30以上40未満の値 // すべての値で演算を行う var plusOnes = intArray.map {$0+1} // すべての値に1を足す
参考書籍
Swift ストリング String
書式
let str = "文字列" var str:String str = "文字列" var c:Character = "c"
特殊文字
特殊文字 | 内容 |
---|---|
\0 | ヌル(nil) |
\ | バックスラッシュ |
\t | タブ |
\n | 改行 |
\r | キャリッジリターン |
\" | ダブルクォーテーション |
\' | シングルクォーテーション |
\xnn | ユニコード(1バイト) |
\unnnn | ユニコード(2バイト) |
\Unnnnnnnn | ユニコード(4バイト) |
※macでバックスラッシュ入力はoption+¥キー
ストリングの文字数
countElements()
let str = "あいうえお" var num = countElements(str)
ストリングに変数や式を含める
\(変数)
let int = 100 let str = "あいう\(int)えお"
ストリングの比較
==
let str = "あいうえお" if (str == "あいうえお") { }
※大文字小文字を区別せずに比較する場合は、lowercaseStringプロパティで小文字に変換する
ストリングを数値に変換する
toInt()!メソッドを使う
let str:String = "123" let int = str.toInt()!
ストリングを浮動小数点に変換する
NSStringにキャストしてfloatValueプロパティ
let r = 120 let pai = "3.14" let ensyu:Float = Float(2*r) * (pai as NSString).floatValue
数値をストリングに変換する
description
let f = 100.5 let str = "aaa" + f.description
ストリングに含まれる文字列の範囲を取り出す
rangeOfString()
let str = "abcdefg" let word = "cd" let range:Range? = str.rangeOfString(word) if let theRange = range { let start:String.Index = theRange.startIndex let end:String.Index = theRange.endIndex }
任意の文字位置から文字列を取り出す
advance
let str = "abcdefg" let start = advance(str.startIndex, 4) let end = advance(start, 2) let pickupStr = str[start..<end] }
NSString に変換して文字列を取り出す
substringToIndex
substringFromIndex
substringWithRange
let str = "abcdefg" let toIndex = (str as NSString).substringToIndex(2) // 結果:"ab" let fromIndex = (str as NSString).substringFromIndex(3) // 結果:"defg" let range:NSRange = NSMakeRange(3, 2) // loc:3, len:2 let withRange = (str as NSString).substringWithRange(range) // 結果:"de" }
※文字列の置き換え stringByReplacingCharactersInRange()メソッド
ストリングを検索する
find()
let str = "abcdefg" let idx = find(str, "cd") // 見つかった位置のString.Index 見つからない場合はnil
ストリングの接頭辞と接尾辞
hasPrefix()
hasSufffix()
let itemList = ["aaa111", "bbb222", "ccc333"] for item in itemList { // aaaではじまる if item.hasPrefix("aaa") { } // 222でおわる if item.hasSuffix("222") { } }
ストリングに文字を追加、挿入、削除
appendString()
insertString()
var str:NSMutableString = "aaa" // 追加 str.appendString("bbb") // 結果:aaabbb // 挿入 str.insertString("ccc", atIndex: 3) // 結果:aaacccbbb // 削除 let delRange = NSMakeRange(6, 3) str.deleteCharactersInRange(delRange) // 結果:aaaccc
参考書籍
Swift 基本シンタックス
定数と変数
型推論が導入されている。
書式
// 定数 let 定数名 = 値 let 定数名:型 = 値 // 変数 var 変数名 = 値 var 変数名:型 = 値
タプル
複数の値を1個の値として扱えるようにする。
書式
(値1, 値2, ・・・) (ラベル:値1, ラベル:値2, ・・・) //ラベル付き
例
var user = ("山田", 35, true) var user:(String, Int, Bool) = ("山田", 35, true) // 型指定 // ラベル付き var user = (name:"山田", age:35, isPass:true) var user = (name:String, age:Int, isPass:Bool) = ("山田", 35, true)
値を取り出す
// インデックス番号でアクセス let name = user.0 let age = user.1 let isPass = user.2 // ラベルでアクセス let name = user.name let age = user.age let isPass = user.isPass
演算子
演算 | 記号 |
---|---|
算術演算子 | +, -, *, /, % |
インクリメント, デクリメント | ++, -- |
論理演算子 | &&, ||, ! |
比較演算子 | >, <, >=, <=, ==, != |
オブジェクトの比較 | ===, !== |
代入演算子 | = |
複合代入演算子 | +=, -=, *=, /=, %=, &&=, ||= |
三項演算子 | 条件式 ? trueの場合の式 : falseの場合の式 |
レンジ演算子 | 開始値..<終了値, 開始値...終了値 |
ビット演算子 | <<, >>, &, |, ^, ~ |
条件分岐
if 文
if (条件式) { ステートメントA } if (条件式1) { ステートメントA } else if (条件式2) { ステートメントB } else { ステートメントC }
switch 文
switch 式 { case 値1: ステートメントA // swiftではbreakしなくても以降の処理を実行しない fallthrough // これを書けばフォールスルーで以降を実行する case 値2: ステートメントB case 値3, 値4, 値5: ステートメントC default: ステートメントD }
ループ処理
// 指定範囲から順に値を取り出す for-in ループ for 変数 in 開始値 ..< 最終値 { ステートメント } // コレクションの値を順に取り出す for-in ループ for 変数 in コレクション { ステートメント } let numList = [4,2,7,8,9] var sum = 0 for num in numList { sum += sum } // カウンタを数えて繰り返す for ループ for (カウンタの初期化; 条件 ; カウントアップまたはダウン) { ステートメント } for (var i=sizelist.count ; i>0; i--) { let size = sizelist[i-1] } // 繰り返し while ループ while (ループ条件) { ステートメント } // 繰り返し do-while ループ do { ステートメント } while (ループ条件) // 現在の繰り返しの残りの処理をスキップする continue // 繰り返しを中断する(ループを中断する) break // ループにラベルを付ける xloop:for x in 0...5 { yloop:for y in 0...5 { if (x>y) { continue xloop // yloopを中断してxloopに抜ける } } } xloop:for x in 0...5 { yloop:for y in 0...5 { if (x>y) { break xloop // yloopだけでなくxloopも中断する } } }
参考書籍
Markdown 記法
Markdown 記法(はてな)
見出し
# h1 ## h2 ### h3
リスト
- リスト - 子 - 孫
数字リスト
数字は増やさなくても良い
1. リスト 2. リスト 3. リスト
ソースコード
```
ソースコード
```
表
指定無し|左寄せ|中央寄せ|右寄せ -|:-|:-:|-: 100|200|300|400
水平線
---
改行
行末に半角スペースを2つ
段落
1段落 2段落
太字
**テキストabc**
イタリック
_テキストabc_
引用
> 引用分 >> 入れ子の引用文
リンク
[リンクテキスト](URL)
Sublime Text 2 メモ
- ALT+M でプレビュー
- ALTで先頭行を選択して>キーで、複数行まとめて引用にする
インフラ系素人の私がAWS試験合格のためにやった事
AWS 認定 ソリューションアーキテクト– アソシエイトレベルに合格しました!
世の中には、仕事はインフラ系でAWS使ってます的な人がちょこっと勉強して合格したよ情報はたくさんありますがインフラ系の素人がなんとか合格した体験記が少ないような気がしていて今記事を書いています。
スコアは65%以上で合格に対して、74%だったので偉そうな事は言えませんが皆さんのご参考になれば幸いです。
この記事はAWS vol.2 Advent Calendar 2014の24日目です。
やった事① AWSを知る
何をして良いかもわからなかったので、とりあえずAWSのホームページを眺めました
- なにはともあれAWSの製品&サービスのページをぼーっとしながら読む
http://aws.amazon.com/jp/products/
- AWSのスライドを片っぱしから読む(ぼーっとしながら)
http://aws.amazon.com/jp/aws-jp-introduction/
インフラ系の知識が無いため、わからない言葉(ロードバランサーとかもわからなかった・・・)はその都度ググりました。
やった事② みなさんの合格した方法を知る
- AWS 認定ソリューションアーキテクト – アソシエイト レベル試験に合格する方法
http://dev.classmethod.jp/etc/how-to-get-a-certification-aws-architect-associate-level/
- AWS認定ソリューションアーキテクトアソシエイトレベルに合格しました
http://drawing-hisa.seesaa.net/article/384974315.html
- AWS認定ソリューションアーキテクト アソシエイトレベルに独学で合格した勉強法
http://www.lancork.net/2014/07/how-to-pass-aws-solutions-architect-associate/
インフラ屋さんでもAWSを業務で使っているわけでも無い私はこれらの記事を読んで少し心が折れました。
やった事③ 本を読む
基礎知識が足りない分は、体系的にまとめらている本を読むことで補いました。
1冊目:一通り読んでこんなデザインパターンがあるんだなとなんとなく理解し、後半の実例でAWSを使ったサービスをイメージできました。
2冊目:この本にそってAWSのアカウントを作ったりEC2立ち上げたりと手を動かしてみました。
3冊目:もっと手を動かした方が良いと思い実習しました。
やった事④ サンプル問題を解く
- サンプル問題は少ないですが、全問正解できるまで何回も解きました。正解以外の項目についても詳しく調べて完璧に理解しているという感じです。
http://aws.amazon.com/jp/certification/certified-solutions-architect-associate/
- アソシエイトのサンプル問題ほど真剣にはやりませんでしたが、合格してみて思った事はアソシエイトレベル以外のサンプル問題も重要だなという事です。ちょっと毛色が違うかもしれませんが一通り解いてみる事をお勧めします!
インフラ系素人がAWS試験合格のために勉強した事 1日目
AWS 認定 ソリューションアーキテクト– アソシエイトレベル取得のため勉強をはじめてみる。
ここ↓から試験ガイドをダウンロードして、読んでみたが何一つわからない・・・
http://aws.amazon.com/jp/certification/certification-levels/certified-solutions-architect-associate/
受かる気がしない・・・
勉強1日目
クラスメソッドさんのページ↓を参考にして少しずつ進めてみる。
http://dev.classmethod.jp/etc/how-to-get-a-certification-aws-architect-associate-level/
大きく分類すると下記3点を勉強する。
- AWSの知識
- IT全般の知識
- 試験に出るプロダクト
幅広すぎて涙が出そうになるけどコツコツがんばる・・・
今日は、AWSの知識として以下の対策を行う。
AWS のコンピューティング、ネットワーキング、ストレージ、データベースサービスの実践的な使用経験
クラスメソッドさんによると、
ここから詳細に理解すべきAWSプロダクトを選びました。EC2、VPC、S3、EBS、RDSです。これらのプロダクトに関する理解は実践的である必要がありますので、詳細まで理解する必要があります。
という事なので、EC2、VPC、S3、EBS、RDSのプロダクトを実践的に使えるレベルになるためawsのページを理解できるまで読む!
EC2
まずはEC2を理解する
http://aws.amazon.com/jp/ec2/
わからない言葉だらけで困惑したが、意味を調べながら何度も読み返してみた。
はたしてこれで実践的に使えるレベルになったと言えるのだろうか・・・
汚いけど(字も読みづらいけど)Amazon EC2まとめ↓
次回は、VPCを理解しよう!