swift
文書の過去の版を表示しています。
Swift
Boot Camp Text で Python と比較
唐突に Python と Swift を比較してみようと思った。
https://pycamp.pycon.jp/textbook/ を Swift で書いてみる。Xcode 14.1 の Playground で動作を確認する。
fizzbuzz
第一段階。まず引数をそのまま返す関数を作って100回実行する。
func fizzbuzz(_ num: Int) -> Int { return num } for num in 1...100 { print(fizzbuzz(num)) }
- 1..<101 とも書ける
- 関数定義で _ をつけるのは「外部引数名の省略」のため。つけない場合は、呼び出す側では fizzbuzz(num:num) と書く。
第2段階。
func fizzbuzz(_ num: Int) -> String { if num % 3 == 0 && num % 5 == 0 { return "FizzBuzz" } else if num % 3 == 0 { return "Fizz" } else if num % 5 == 0 { return "Buzz" } return String(num) } for num in 1...100 { print(fizzbuzz(num)) }
- 論理演算子は and ではなく &&
- 文字列リテラルでシングルクオートは使えない
- Int を文字列に型変換するには String(値)
定数と変数
let a = 1 print(a) //a = 2 //print(a) var b = 2 print(b) b = 3 print(b) //b = "4" //print(b) 出力 1 2 3
- let は定数。a=2 のコメントアウトを外すとエラー
- var は変数。初期値の型を代入できる。b="4" のコメントアウトを外すとエラー
var c: Float = 5 print(c) 出力 5.0
- 変数の宣言で型を記述できる
べき乗
import Foundation print(pow(5,2))
- 5**2 はべき乗ではないので pow 関数を使う
- pow 関数を使うには Foundation などのインポートが必要
文字列
print("Hello\"world") var a = 1 print("Hello \(a) world")
Hello"world Hello 1 world
複数行文字列リテラル
print(""" foo bar baz """)
- 開始の """ の直後には何も書かない
- 終了の """ の直前にも何も書かない
print("spam" + "ham")
- 足し算はできる
- 掛け算はできない
let s = "swift" let i = s.startIndex print(s[i]) 結果 s
- 文字列処理はいろいろ大変という話
コレクション
var a : [Any] = ["spam", "egg", 0.5] print(a)
- 中身の型が揃っていない配列を作るには Any 型指定が必要
a += ["ham"] // a = a + ["ham"] a[1]
- スライスは ArraySlice で行う
for animal in ["cat", "dog", "snake"] { print(animal) }
- これだけみると Python そっくりなのに
コレクションは配列、辞書、集合
タプル
var (dog, cat) = ("dog", "cat") print(dog, cat)
- ここだけ見てるとコレクションっぽいというか Python っぽい
var animals = ("dog", "cat") print(animals) print(animals.0) print(animals.1) //for animal in animals { // print(animal) //}
- for は使えない。シーケンスではないと言われる。
let http200Status = (statusCode: 200, description: "OK") print(http200Status.statusCode) let (statusCode, _) = http200Status print(statusCode)
ファイル操作
Playground でテキストファイルの読み書き、意外に大変
https://stackoverflow.com/questions/24245916/how-can-i-read-a-file-in-a-swift-playground
日付
import Foundation var d = NSDate() print(d) var d2 = Date() print(d2)
正規表現
Swift 5.7 の新機能
https://www.hackingwithswift.com/swift/5.7/regexes
そのまま引用
let search1 = /My name is (.+?) and I'm (\d+) years old./ let greeting1 = "My name is Taylor and I'm 26 years old." if let result = try? search1.wholeMatch(in: greeting1) { print("Name: \(result.1)") print("Age: \(result.2)") }
もうしわけないので if let ではなく guard let else return に書き換えてみる
func hello() { let search1 = /My name is (.+?) and I'm (\d+) years old./ let greeting1 = "My name is Taylor and I'm 26 years old." guard let result = try? search1.wholeMatch(in: greeting1) else { return } print("Name: \(result.1)") print("Age: \(result.2)") } hello()
https://speakerdeck.com/ainame/swift-5-dot-7debian-waruzheng-gui-biao-xian-woshi-sitemiyou
swift.1670224950.txt.gz · 最終更新: 2022/12/05 16:22 by Takuya Nishimoto