文書の過去の版を表示しています。


Swift

since 2022-12-05

The Swift Programming Language(日本語版)

https://www.swiftlangjp.com/

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]
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
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0