Swiftウェブ開発者


Swiftは、IOSの開発のための標準言語となっており、同様にサーバー側のプログラミングのための人気の言語になっている.以前のプログラミング経験はPHPとJavaScriptで大部分ですので、Swiftは私が始めたとき全く新しい世界でした.私はこのポストを書いているので、Swiftを使う方法については、PHP、Python、RubyなどからのWeb開発者に対してヘッドスタートをします.

インストール

MacOS
SwiftのMacでのインストールは超簡単です.ジャストインストールXcode ! これは、言語を試しての素晴らしい遊び場機能があります.

Linux
LinuxでSwiftを使用するには、次の手順に従ってくださいSwift.org コンパイラをダウンロードして実行します.あるいは、Dockerimage Swiftの実行に使用できます.

Windows
Windows 10の場合は、SwiftをLinuxサブシステムにインストールすることができますが、最も簡単な方法は上記のDockerイメージをインストールすることです.

私のセミコロンはどこですか.
print("Hello, world!")
あなたが気づく最初のことは、Swiftが各ラインの終わりにセミ・コロンを必要としないということです.Swift両方のスクリプト言語とコンパイルされた言語を念頭に構築されたので、言語の両方の種類の異なる機能が表示されます.
また、RubyやPythonと同様に、条件付きで括弧を使用する必要はありませんが、JavaやPHPのようなブロックの内容を囲むように括弧を使用します.
if true {
    print("It is true")
}
Swiftループの同じ構造を使用します.
let fruits = ["Apple", "Pear", "Orange"]
for fruit in fruits {
    print("My favorite fruit is: \(fruit)")
}

レットVSヴァール
Swiftでは、データ名を2つの異なる単語で宣言できます.let and var . ES 6 JavaScriptとは異なり、let 定数とvar は正規変数です.aの値let 定数は設定後に変更できませんvar 必要に応じて変更することができます.
次のコードを書くと、エラーが発生します.
let name = "Andrew"
name = "not Andrew"
しかし以下のようになります.
var count = 1
count = 2
Swiftコンパイラは、変数を作成し、それを変更しない場合に警告を与えます.したがって、定数を使用して起動する必要があります.

スウィフトタイプ
Swiftのすべては静的にタイプされます、しかし、タイプは囲碁またはさびのように推論されます.型推論は基本的にコンパイラが初期値に基づいて変数の型を示すことを意味します.したがって、型が定義されていない定数や変数を作成しようとすると、コンパイラはその型を知っているので、すぐに値を設定する必要があります.
たとえば、このコードを実行するとエラーが発生します.
let favoriteMovie
favoriteMovie = "Return of the Jedi"
定数型を宣言するか、定数を直ちに設定する必要があります.
let favoriteMovie: String
favoriteMovie = "Return of the Jedi"

let secondFavoriteMovie = "The Empire Strikes Back"
Swiftのデータのすべての標準的な作品の種類があります:Int String Float Double Bool など.

パラメータ名!
Swiftの私の好きな特徴の一つはパラメータ命名です.パラメーターを関数と名前を作成すると、その関数を呼び出すコードはパラメーターを名前付けする必要があります.
func sayHello(greeting: String) {
    print(greeting)
}

sayHello(greeting: "Hola!")
一度それに慣れると、それはあなたの関数をはるかに表現になります.名前付きパラメータを必要としない場合は、_ 名前の前で省略する.
func sayGoodbye(_ goodbye: String) {
    print(goodbye)
}

sayGoodbye("Adios!")
Swift標準ライブラリでは、状況に応じて両方の方法で書かれた関数が表示されます.

何が問題点ですか?
前に任意のスウィフトコードを読んでいる場合は、おそらく疑問符が使用されているいくつかのインスタンスに気づいている.疑問符は特別なタイプを作成するのに用いられます、そして、それは基本的に値がタイプかNILでありえることを意味します.例えば、変数がvar optional: String? , it means optionalString or nil .
現在、オプションは値を得るために少しの仕事を必要とします.オプション型で変数を使用するには、値をアンラップする必要があります.
let optional: String? = "I am an optional"
if let value = optional {
    print(value)
}
if文を使用すると、オプションの値がnil もしそうならば、value 中で使われるif ブロック.
また、ガードステートメントを使用してオプションを展開できます.
enum OptionalError: Error {
    case optionalIsNil
}

let value: String? = nil
guard let name = value else {
    throw OptionalError.optionalIsNil
}
ガードステートメントは、値をname を返します.nil , これはブロックの内容を実行します.この場合、value is nil , ガードブロックはエラーが発生したことを示す顧客エラーをスローします.
オプションはあなたがそれらを使用する最初の時間を混乱させることができ、あなたは、なぜそれを使用して尋ねることがありますか?optionalsの目的は、あなたのコードがあなたの定数と変数がそうでありえるあらゆる状況を扱うのを確認することですnil . セッションから現在のユーザを取得する関数があるとしましょう.セッションが空の状態を処理します.
func getCurrentUser(session: Session) -> User? {
    if session.has("currentUser") {
        return session.get("currentUser")
    }

    return nil
}

let session = Session()
if let user = getCurrentUser(session: session) {
    print(user.name)
}
この場合、getCurrentUser 返すnil したがって、実際に関数から返された値がユーザオブジェクトであるなら、ユーザ名を印刷するだけです.我々がチェックしなかったならばnil , 名前が存在しないため、ランタイムエラーが発生します.最後に、オプションの目的はコードをより正確にすることです.

struct対クラス
Swiftでコーディングを開始すると、ほとんど同じように見える2つの構造があることに気づくでしょう.以下に例を示します.
struct CarSize {
    var height: Double
    var width: Double
    var length: Double

    init(height: Double, width: Double, length: Double) {
        self.height = height
        self.width = width
        self.length = length
    }

    func getArea() -> Double {
        return width * length
    }
}

class Car {
    var make: String
    var model: String
    var color: String

    init(make: String, model: String, color: String) {
        self.make = make
        self.model = model
        self.color = color
    }

    func getType() -> String {
        return "\(make): \(model)"
    }
}

let carSize = CarSize(height: 10, width: 10, length: 20)
let car = Car(make: "Chevrolet", model: "Corvette", color: "Red")
両方の構造体とクラスは、プロパティとメソッドを含めることができるカスタム型を作成するために使用されます.それで、違いは何ですか?
最初に、クラスだけが別のクラスから継承できます.structはstructから継承できません.任意の種類の継承を必要とする場合は、クラスを使用する必要があります.
次に、クラスのインスタンスを参照渡しし、構造体のインスタンスを値渡します.基本的に、それらはメモリに異なって記憶されることを意味します.クラスのインスタンスを作成する場合、インスタンスを保持している変数はインスタンスを実際に含んでいません.メモリ内にインスタンスが存在する場合のリファレンスです.構造体のインスタンスを保持する変数は、実際に構造体を保持します.したがって、クラスインスタンスを関数に渡すと、関数はオブジェクトへの参照を受け取りますが、structインスタンスを関数に渡すと、構造体のコピーを受け取ります.どちらのシナリオにも利点と欠点がありますので、構造体やクラスを選択するには何を達成しようとしているかによって異なります.
最後に、構造体は通常、CarSize 例とクラスでは、頻繁に変更されたり、メソッドを変異している型を含めることができます.アップルはたいていのクラスでクラスを推奨します.

結論
私はこのクイックランダウンを迅速にいくつかの迅速な概念を理解するのに役立ちます願っています.アップルの読書をおすすめしますThe Swift Programming Language もっと学ぶ.ご質問があればコメントを投稿してください.
ハッピースモーキング!