「Swift」の版間の差分
ナビゲーションに移動
検索に移動
(→列挙型) |
(→if) |
||
| 208行目: | 208行目: | ||
} else if 条件 { | } else if 条件 { | ||
} else { | } else { | ||
| + | } | ||
| + | </pre> | ||
| + | ===for=== | ||
| + | <pre> | ||
| + | for 変数 in コレクション { | ||
} | } | ||
</pre> | </pre> | ||
2021年1月12日 (火) 15:00時点における版
| Xcode | Mac | IPhone Xcode |
環境
Xcode
コマンドライン
- swiftと入力
- 終了には、:q もしくは、ctrl+D
- パスが通ったところに配置されていれば実行できる
$ swift
Welcome to Apple Swift version 5.3.1 (swiftlang-1200.0.41 clang-1200.0.32.8).
Type :help for assistance.
1> print("test")
test
コマンドラインツールを実行
- アクティブ開発ディレクトリのコマンドラインツールを見つけて実行する
- アクティブ開発ディレクトリは、xcode-select で指定する
- アクティブ開発ディレクトリを表示
$ xcode-select -p /Applications/Xcode.app/Contents/Developer
- 以下のようにswiftコマンドを実行もできる
$ xcrun swift
SDK
- SDKを指定してswiftを起動するときに、指定できるSDK一覧を表示
$ xcodebuild -showsdks
iOS SDKs:
iOS 14.2 -sdk iphoneos14.2
iOS Simulator SDKs:
Simulator - iOS 14.2 -sdk iphonesimulator14.2
macOS SDKs:
DriverKit 20.0 -sdk driverkit.macosx20.0
macOS 11.0 -sdk macosx11.0
:
SDKを指定して、swiftを起動
$ xcrun -sdk macosx11.0 swift
環境変数にSDKパスを指定
- 以下でSDKのパスを取得し、SDKROOT環境変数に設定し、swiftを起動
$ xcrun -sdk macosx11.0 --show-sdk-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk
データ型
- 型の実体はインスタンス
- 値型と参照型
- 基本データ型
- Int
- UInt
- Float
- Double
- Bool : true/false
- Character : Unicodeの1文字
- String : 値型
変数の定義
- 変数
var 変数名 : 型 = 式
var age : Int = 49
- 定数(単一代入)
let 変数名 : 型 = 式
let age = 49
型変換
- 暗黙の型変換は行われない
- Double() や Int() などのイニシャライザを利用する
1> var i:Int = 5 2> var d:Double = 0; 3> d = i error: repl.swift:3:5: error: cannot assign value of type 'Int' to type 'Double' 3> d = Double(i) 4> d $R0: Double = 5
文字列
- 連結は +
- リテラルは、"で囲む
- \n 改行など\でエスケープ
文字列埋め込み
- \(式) で展開される
> var i:Int = 5 i: Int = 5 > let s: String = "Number \(i * 3)" s: String = "Number 15"
配列
- T型の配列は、Array<T> もしくは、[T]
- 型省略初期化
> var ia = [1,2,3,4,5]
- 型宣言初期化
> var ia2: [Int] = [1,2,3,4,5]
- 要素0で初期化
> var sa = [String]() sa: [String] = 0 values
- もしくは
> var sa2: [String] = [] sa2: [String] = 0 values
参照と追加
> var ia = [1,2,3]
> ia[1]
$R0: Int = 2
> ia.append(4)
> ia
$R1: [Int] = 4 values {
[0] = 1
[1] = 2
[2] = 3
[3] = 4
}
map関数
- 元の配列内の全てのアイテムに対してアクションを行い結果に基づいた配列を作成
let base = [1,2,3]
let dbl = base.map {
(val) -> Int in
return val * 2
}
print(dbl)
結果:[2, 4, 6]
- 省略形
let base = [1,2,3]
let dbl = base.map({ $0 * 2 })
print(dbl)
結果:[2, 4, 6]
filter関数
- 元配列から条件に一致する配列を生成
let nums = [0,1,2,3,4,5,6]
print(nums.filter({ (num) -> Bool in
return num % 2 == 0
}))
結果:[0, 2, 4, 6]
- 省略形
let nums = [0,1,2,3,4,5,6]
print(nums.filter({ $0 % 2 == 0 }))
reduce関数
- 配列内の全ての値を単一の結果に集約
let nums = [1,2,3]
let initial = 10;
print(nums.reduce(initial, { (curTotal, val) -> Int in
return curTotal + val
}))
結果:16
- 省略形
let nums = [1,2,3]
let initial = 10;
print(nums.reduce(initial,{ $0 + $1 }))
結果:16
演算子
- C言語の演算子はほぼ使える
- ポインタはないため、*、&、-> は異なった意味
- インクリメント(++)、デクリメント(--) は廃止された
モジュールと名前空間
モジュールのインポート
- フレームワークや外部モジュールからクラスや関数情報をimportで取込む
- Xcodeにある、*.swiftdoc や *.swiftmodule がSwiftが利用できるモジュール情報
import Foundation
名前空間
- ドットで区切って修飾
制御構文
if
- 条件の()は不要
- 1文しかなくても{}は省略不可
- 条件はBool型である必要がある
if 条件 {
} else if 条件 {
} else {
}
for
for 変数 in コレクション {
}
構造体
struct Person {
let name: String
let age: Int
}
struct Team {
let name: String
let members: [Person]
func printMenger(){
for member in members {
print(member.name)
}
}
}
列挙型
enum FoodChoice {
case cereal,salad,sandwich,pizza,chiken,pie
}
enum Meal {
case breakfast,lunch,dinner,snack
func foodChoices() -> [FoodChoice] {
switch self {
case .breakfast:
return [.cereal]
case .lunch:
return [.salad,.sandwich,.pizza]
case .dinner:
return [.sandwich, .pizza, .pie]
case .snack:
return [.cereal,.pie]
}
}
}
let meal: Meal = .lunch
print(meal.foodChoices())
結果:[__lldb_expr_29.FoodChoice.salad, __lldb_expr_29.FoodChoice.sandwich, __lldb_expr_29.FoodChoice.pizza]
SwiftUI
- https://developer.apple.com/jp/xcode/swiftui/
- 1セットのツールとAPIを使用するだけで、あらゆるAppleデバイス向けのユーザーインターフェイスを構築
- 宣言型シンタックスを使
- 宣言型のスタイルは、アニメーションなどの複雑な概念にも適用
デザインツール
- Xcodeには、SwiftUIでのインターフェイス構築をドラッグ&ドロップのように簡単に行える直感的な新しいデザインツールが含まれています
- デザインキャンバスでの編集内容と、隣接するエディタ内のコードはすべて完全に同期されます
ドラッグ&ドロップ
- ユーザーインターフェイス内のコンポーネントの位置は、キャンバス上でコントロールをドラッグするだけで調整できます
ダイナミックリプレースメント
- wiftのコンパイラとランタイムはXcode全体に完全に埋め込まれているため、Appは常にビルドされ実行されます
- 表示されるデザインキャンバスは、単にユーザーインターフェイスに似せたものではなく、実際のAppそのもの
- Xcodeは編集したコードを実際のAppに直接組み入れることができます
プレビュー
- プレビューを1つまたは複数作成して、サンプルデータを取得できる
Playground
チュートリアル
© 2006 矢木浩人