Movatterモバイル変換


[0]ホーム

URL:


developersIOproduced by Classmethod

新しいプログラミング言語 Swift

新しいプログラミング言語 Swift

2014.06.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Objective-Cに替わる新しいプログラミング言語Swiftの登場

WWDC2014で発表された新しいプログラミング言語Swiftでできることを紹介したいと思います。

screenshot 2014-06-03 4.09.07

今までとこれから

Swift使うとこんなにコードが短くなるぜという例です。

今まで

screenshot 2014-06-03 4.55.03

これから

screenshot 2014-06-03 4.55.10

確かにスマートですね。

言語ガイドをダウンロード

iBookでガイドを読めますのでダウンロードしてみましょう。

screenshot 2014-06-03 4.09.18

変数の宣言

varは変数、letは定数

var myVar = 42myVar = 50let myConst = 42

コントロール

if,switch,for-in,for,while,do-while

let individualScores = [76, 43, 103, 87, 12]var teamScore = 0for score in individualScores {    if score > 50 {        teamScore += 3    } else {        teamScore += 1    }}

関数とクロージャ

funcで関数の定義と代入

関数を定義して

func greet(name: String, day: String) -> String {    return "Hello \(name), today is \(day)."}greet("Bob", "Tuesday")

代入もできる。

func makeIncrementer() -> (Int -> Int) {    func addOne(number: Int) -> Int {        return 1 + number    }    return addOne}var increment = makeIncrementer()increment(7)

複数の戻り値

Object型に全てを詰めて返していた遠い記憶が今よみがえるw...

func count(string: String) -> (vowels: Int, consonants: Int, others: Int) {    var vowels = 0, consonants = 0, others = 0    for character in string {        switch String(character).lowercaseString {        case "a", "e", "i", "o", "u":            ++vowels        case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",        "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":            ++consonants        default:            ++others        }    }    return (vowels, consonants, others)}let total = count("some arbitrary string!")

オブジェクトとクラス

クラス定義してインスタンス化して利用

class Shape {    var numberOfSides = 0    func simpleDescription() -> String {        return "A shape with \(numberOfSides) sides."    }}var shape = Shape()shape.numberOfSides = 7

列挙型と構造型

enum Suit {    case Spades, Hearts, Diamonds, Clubs    func simpleDescription() -> String {        switch self {        case .Spades:            return "spades"        case .Hearts:            return "hearts"        case .Diamonds:            return "diamonds"        case .Clubs:            return "clubs"        }    }}let hearts = Suit.Hearts

プロトコルと拡張

Javaでいうとインタフェースとアブストラクトに近いけど、プロパティを追加するとコンパイルエラーになるから違うかな。

protocol ExampleProtocol {    var simpleDescription: String { get }    mutating func adjust()}extension Int: ExampleProtocol {    var simpleDescription: String {    return "The number \(self)"    }    mutating func adjust() {        self += 42    }}7.simpleDescription

型アノテーション

変数に意味を持たせることができます。

var welcomeMessage: String

型セーフ、型インタフェース

型推論

let meaningOfLife = 42let pi = 3.14159let anotherPi = 3 + 0.14159

タプル

let http404Error = (404, "Not Found")

アサーション

let age = -3assert(age >= 0, "A person's age cannot be less than zero")

コレクション型

配列、辞書など

var shoppingList: String[] = ["Eggs", "Milk"]var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"]

サブスクリプト

構造内部の辞書型や列挙型のアクセス方法としてサブスクリプトを定義できます。

struct TimesTable {    let multiplier: Int    subscript(index: Int) -> Int {        return multiplier * index    }}let threeTimesTable = TimesTable(multiplier: 3)println("six times three is \(threeTimesTable[6])")

継承

class SomeClass: SomeSuperclass {    // class definition goes here}class Bicycle: Vehicle {    init() {        super.init()        numberOfWheels = 2    }}

オーバーライド

class Car: Vehicle {    var speed: Double = 0.0    init() {        super.init()        maxPassengers = 5        numberOfWheels = 4    }    override func description() -> String {        return super.description() + "; "            + "traveling at \(speed) mph"    }}

getter/setter

getter/setterのオーバライドもできますね。

class SpeedLimitedCar: Car {    override var speed: Double  {    get {        return super.speed    }    set {        super.speed = min(newValue, 40.0)    }    }}

イニシャライザ

initを使ってイニシャライザを呼びます

struct Color {    let red = 0.0, green = 0.0, blue = 0.0    init(red: Double, green: Double, blue: Double) {        self.red   = red        self.green = green        self.blue  = blue    }}let magenta = Color(red: 1.0, green: 0.0, blue: 1.0)

型キャスト

asを使って型の判定を行えます。

for thing in things {    switch thing {    case 0 as Int:        println("zero as an Int")    case 0 as Double:        println("zero as a Double")    }}var things = Any[]() things.append(0)things.append(0.0)

ネストした型

struct BlackjackCard {        // nested Suit enumeration    enum Suit: Character {        case Spades = "♠", Hearts = "♡", Diamonds = "♢", Clubs = "♣"    }}

ジェネリクス

型指定の引数

func swapTwoInts(inout a: Int, inout b: Int)func swapTwoValues<T>(inout a: T, inout b: T)

まとめ

どこかで見たことある書き方が多く、とても憶えやすそうな言語仕様ですね!

参考資料

Swift is an innovative new programming language

この記事をシェアする

FacebookHatena blogX

EVENTS

セミナー一覧会社説明会一覧勉強会一覧

関連記事

iOSのショートカットを活用してApp Storeからインストールしたアプリの規約を精読しやすくする
haoyayoi
2025.09.30
iPhone 17 の購入準備!デバイス上で物理SIMをeSIMへ変換した
和田 健司
2025.09.13
iOS 18のダークモードでアプリアイコンの色が反転する条件を検証してみた
和田 健司
2024.09.20
Matterport × iPhone 12 Pro による LiDAR Scan で、クラスメソッド日比谷オフィスの 3D モデルを生成してみた
若槻龍太
2024.03.08

[8]ページ先頭

©2009-2025 Movatter.jp