WWDC2014で発表された新しいプログラミング言語Swiftについて

WWDC2014は徹頭徹尾“Write the code. Change the world”だった。
WWDC2014で発表された新しいプログラミング言語Swiftを知りたいので、教えてください。
2014-06-06 11:36 コメント
已邀请:

ベストアンサー

0

iQi - 面白いアプリを開発中

{ 賛成 }:

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

変数の宣言
varは変数、letは定数

var myVar = 42
myVar = 50
let myConst = 42


コントロール
if,switch,for-in,for,while,do-while

let individualScores = [76, 43, 103, 87, 12]
var teamScore = 0
for 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 = 42
let pi = 3.14159
let anotherPi = 3 + 0.14159


タプル

let http404Error = (404, "Not Found")


アサーション

let age = -3
assert(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:https://developer.apple.com/swift/
2014-06-06 11:43 コメント

ログインまたは登録してから回答してください

lujian
lujian

Javaが得意です。

@ステータス

  • 更新: 2014-06-06 11:43
  • 閲覧: 1928
  • フォロー: 2
EXIT フルスクリーンモード 回答