summaryrefslogtreecommitdiffhomepage
path: root/ru-ru
diff options
context:
space:
mode:
Diffstat (limited to 'ru-ru')
-rw-r--r--ru-ru/swift-ru.html.markdown51
1 files changed, 51 insertions, 0 deletions
diff --git a/ru-ru/swift-ru.html.markdown b/ru-ru/swift-ru.html.markdown
index ab1b3434..3d2bd22f 100644
--- a/ru-ru/swift-ru.html.markdown
+++ b/ru-ru/swift-ru.html.markdown
@@ -402,6 +402,35 @@ if mySquare === mySquare {
println("Ага, это mySquare")
}
+// Опциональная инициализация (init)
+class Circle: Shape {
+ var radius: Int
+ override func getArea() -> Int {
+ return 3 * radius * radius
+ }
+
+ // Поместите постфиксный знак вопроса после `init` - это и будет опциональная инициализация,
+ // которая может вернуть nil
+ init?(radius: Int) {
+ self.radius = radius
+ super.init()
+
+ if radius <= 0 {
+ return nil
+ }
+ }
+}
+
+var myCircle = Circle(radius: 1)
+println(myCircle?.getArea()) // Optional(3)
+println(myCircle!.getArea()) // 3
+var myEmptyCircle = Circle(radius: -1)
+println(myEmptyCircle?.getArea()) // "nil"
+if let circle = myEmptyCircle {
+ // не будет выполняться поскольку myEmptyCircle равен nil
+ println("circle не nil")
+}
+
//
// MARK: Перечисления
@@ -433,6 +462,28 @@ enum BookName: String {
}
println("Имя: \(BookName.John.rawValue)")
+// Перечисление (enum) со связанными значениями
+enum Furniture {
+ // Связать с типом Int
+ case Desk(height: Int)
+ // Связать с типами String и Int
+ case Chair(String, Int)
+
+ func description() -> String {
+ switch self {
+ case .Desk(let height):
+ return "Письменный стол высотой \(height) см."
+ case .Chair(let brand, let height):
+ return "Стул бренда \(brand) высотой \(height) см."
+ }
+ }
+}
+
+var desk: Furniture = .Desk(height: 80)
+println(desk.description()) // "Письменный стол высотой 80 см."
+var chair = Furniture.Chair("Foo", 40)
+println(chair.description()) // "Стул бренда Foo высотой 40 см."
+
//
// MARK: Протоколы