mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-30 01:50:25 +02:00
Update Swift pre-decrement syntax to match v3.0 (#2395)
This commit is contained in:
@@ -373,7 +373,7 @@ internal class Rect: Shape {
|
|||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ filename: learnswift-es.swift
|
|||||||
---
|
---
|
||||||
|
|
||||||
Swift es un lenguaje de programación para el desarrollo en iOS y OS X creado
|
Swift es un lenguaje de programación para el desarrollo en iOS y OS X creado
|
||||||
por Apple. Diseñado para coexistir con Objective-C y ser más resistente contra
|
por Apple. Diseñado para coexistir con Objective-C y ser más resistente contra
|
||||||
el código erroneo, Swift fue introducido en el 2014 en el WWDC, la conferencia
|
el código erroneo, Swift fue introducido en el 2014 en el WWDC, la conferencia
|
||||||
de desarrolladores de Apple.
|
de desarrolladores de Apple.
|
||||||
|
|
||||||
@@ -27,13 +27,13 @@ import UIKit
|
|||||||
// MARK: Básicos
|
// MARK: Básicos
|
||||||
//
|
//
|
||||||
|
|
||||||
// XCode soporta referencias para anotar tu código y agregarlos a lista de la
|
// XCode soporta referencias para anotar tu código y agregarlos a lista de la
|
||||||
// barra de saltos.
|
// barra de saltos.
|
||||||
// MARK: Marca de sección
|
// MARK: Marca de sección
|
||||||
// TODO: Hacer algo pronto
|
// TODO: Hacer algo pronto
|
||||||
// FIXME: Arreglar este código
|
// FIXME: Arreglar este código
|
||||||
|
|
||||||
// En Swift 2, println y print fueron combinados en un solo método print.
|
// En Swift 2, println y print fueron combinados en un solo método print.
|
||||||
// Print añade una nueva línea automáticamente.
|
// Print añade una nueva línea automáticamente.
|
||||||
print("Hola, mundo") // println ahora es print
|
print("Hola, mundo") // println ahora es print
|
||||||
print("Hola, mundo", appendNewLine: false) // print sin agregar nueva línea
|
print("Hola, mundo", appendNewLine: false) // print sin agregar nueva línea
|
||||||
@@ -46,18 +46,18 @@ let øπΩ = "value" // nombres de variable unicode
|
|||||||
let π = 3.1415926
|
let π = 3.1415926
|
||||||
let convenience = "keyword" // nombre de variable contextual
|
let convenience = "keyword" // nombre de variable contextual
|
||||||
// Las declaraciones pueden ser separadas por punto y coma (;)
|
// Las declaraciones pueden ser separadas por punto y coma (;)
|
||||||
let weak = "keyword"; let override = "another keyword"
|
let weak = "keyword"; let override = "another keyword"
|
||||||
// Los acentos abiertos (``) permiten utilizar palabras clave como nombres de
|
// Los acentos abiertos (``) permiten utilizar palabras clave como nombres de
|
||||||
// variable
|
// variable
|
||||||
let `class` = "keyword"
|
let `class` = "keyword"
|
||||||
let explicitDouble: Double = 70
|
let explicitDouble: Double = 70
|
||||||
let intValue = 0007 // 7
|
let intValue = 0007 // 7
|
||||||
let largeIntValue = 77_000 // 77000
|
let largeIntValue = 77_000 // 77000
|
||||||
let label = "some text " + String(myVariable) // Conversión (casting)
|
let label = "some text " + String(myVariable) // Conversión (casting)
|
||||||
let piText = "Pi = \(π), Pi 2 = \(π * 2)" // Interpolación de string
|
let piText = "Pi = \(π), Pi 2 = \(π * 2)" // Interpolación de string
|
||||||
|
|
||||||
// Valores específicos de la compilación (build)
|
// Valores específicos de la compilación (build)
|
||||||
// utiliza la configuración -D
|
// utiliza la configuración -D
|
||||||
#if false
|
#if false
|
||||||
print("No impreso")
|
print("No impreso")
|
||||||
let buildValue = 3
|
let buildValue = 3
|
||||||
@@ -67,13 +67,13 @@ let piText = "Pi = \(π), Pi 2 = \(π * 2)" // Interpolación de string
|
|||||||
print("Build value: \(buildValue)") // Build value: 7
|
print("Build value: \(buildValue)") // Build value: 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Las opcionales son un aspecto del lenguaje Swift que permite el
|
Las opcionales son un aspecto del lenguaje Swift que permite el
|
||||||
almacenamiento de un valor `Some` (algo) o `None` (nada).
|
almacenamiento de un valor `Some` (algo) o `None` (nada).
|
||||||
|
|
||||||
Debido a que Swift requiere que cada propiedad tenga un valor,
|
Debido a que Swift requiere que cada propiedad tenga un valor,
|
||||||
hasta un valor 'nil' debe de ser explicitamente almacenado como un
|
hasta un valor 'nil' debe de ser explicitamente almacenado como un
|
||||||
valor opcional.
|
valor opcional.
|
||||||
|
|
||||||
Optional<T> es un enum.
|
Optional<T> es un enum.
|
||||||
*/
|
*/
|
||||||
var someOptionalString: String? = "opcional" // Puede ser nil
|
var someOptionalString: String? = "opcional" // Puede ser nil
|
||||||
@@ -85,7 +85,7 @@ if someOptionalString != nil {
|
|||||||
if someOptionalString!.hasPrefix("opt") {
|
if someOptionalString!.hasPrefix("opt") {
|
||||||
print("Tiene el prefijo")
|
print("Tiene el prefijo")
|
||||||
}
|
}
|
||||||
|
|
||||||
let empty = someOptionalString?.isEmpty
|
let empty = someOptionalString?.isEmpty
|
||||||
}
|
}
|
||||||
someOptionalString = nil
|
someOptionalString = nil
|
||||||
@@ -104,14 +104,14 @@ if let someOptionalStringConstant = someOptionalString {
|
|||||||
|
|
||||||
// Swift tiene soporte de almacenamiento para cualquier tipo de valor.
|
// Swift tiene soporte de almacenamiento para cualquier tipo de valor.
|
||||||
// AnyObject == id
|
// AnyObject == id
|
||||||
// A diferencia de Objective-C `id`, AnyObject funciona con cualquier
|
// A diferencia de Objective-C `id`, AnyObject funciona con cualquier
|
||||||
// valor (Class, Int, struct, etc)
|
// valor (Class, Int, struct, etc)
|
||||||
var anyObjectVar: AnyObject = 7
|
var anyObjectVar: AnyObject = 7
|
||||||
anyObjectVar = "Cambiado a un valor string, no es buena práctica, pero posible."
|
anyObjectVar = "Cambiado a un valor string, no es buena práctica, pero posible."
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Comentar aquí
|
Comentar aquí
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Comentarios anidados también son soportados
|
Comentarios anidados también son soportados
|
||||||
*/
|
*/
|
||||||
@@ -122,8 +122,8 @@ anyObjectVar = "Cambiado a un valor string, no es buena práctica, pero posible.
|
|||||||
//
|
//
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Tipos Array (arreglo) y Dictionary (diccionario) son structs (estructuras).
|
Tipos Array (arreglo) y Dictionary (diccionario) son structs (estructuras).
|
||||||
Así que `let` y `var` también indican si son mudables (var) o
|
Así que `let` y `var` también indican si son mudables (var) o
|
||||||
inmutables (let) durante la declaración de sus tipos.
|
inmutables (let) durante la declaración de sus tipos.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -173,7 +173,7 @@ for i in -1...shoppingList.count {
|
|||||||
shoppingList[1...2] = ["steak", "peacons"]
|
shoppingList[1...2] = ["steak", "peacons"]
|
||||||
// Utilizar ..< para excluir el último valor
|
// Utilizar ..< para excluir el último valor
|
||||||
|
|
||||||
// Ciclo while
|
// Ciclo while
|
||||||
var i = 1
|
var i = 1
|
||||||
while i < 1000 {
|
while i < 1000 {
|
||||||
i *= 2
|
i *= 2
|
||||||
@@ -224,7 +224,7 @@ func greet(name: String, day: String) -> String {
|
|||||||
}
|
}
|
||||||
greet("Bob", "Martes")
|
greet("Bob", "Martes")
|
||||||
|
|
||||||
// Similar a lo anterior, a excepción del compartamiento de los parámetros
|
// Similar a lo anterior, a excepción del compartamiento de los parámetros
|
||||||
// de la función
|
// de la función
|
||||||
func greet2(requiredName: String, externalParamName localParamName: String) -> String {
|
func greet2(requiredName: String, externalParamName localParamName: String) -> String {
|
||||||
return "Hola \(requiredName), hoy es el día \(localParamName)"
|
return "Hola \(requiredName), hoy es el día \(localParamName)"
|
||||||
@@ -312,7 +312,7 @@ print(numbers) // [3, 6, 18]
|
|||||||
// Las estructuras y las clases tienen capacidades similares
|
// Las estructuras y las clases tienen capacidades similares
|
||||||
struct NamesTable {
|
struct NamesTable {
|
||||||
let names = [String]()
|
let names = [String]()
|
||||||
|
|
||||||
// Subscript personalizado
|
// Subscript personalizado
|
||||||
subscript(index: Int) -> String {
|
subscript(index: Int) -> String {
|
||||||
return names[index]
|
return names[index]
|
||||||
@@ -343,7 +343,7 @@ public class Shape {
|
|||||||
|
|
||||||
internal class Rect: Shape {
|
internal class Rect: Shape {
|
||||||
var sideLength: Int = 1
|
var sideLength: Int = 1
|
||||||
|
|
||||||
// Getter y setter personalizado
|
// Getter y setter personalizado
|
||||||
private var perimeter: Int {
|
private var perimeter: Int {
|
||||||
get {
|
get {
|
||||||
@@ -354,13 +354,13 @@ internal class Rect: Shape {
|
|||||||
sideLength = newValue / 4
|
sideLength = newValue / 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lazily loading (inicialización bajo demanda) a una propiedad
|
// Lazily loading (inicialización bajo demanda) a una propiedad
|
||||||
// subShape queda como nil (sin inicializar) hasta que getter es llamado
|
// subShape queda como nil (sin inicializar) hasta que getter es llamado
|
||||||
lazy var subShape = Rect(sideLength: 4)
|
lazy var subShape = Rect(sideLength: 4)
|
||||||
|
|
||||||
// Si no necesitas un getter y setter personalizado
|
// Si no necesitas un getter y setter personalizado
|
||||||
// pero aún quieres ejecutar código antes y después de hacer get o set
|
// pero aún quieres ejecutar código antes y después de hacer get o set
|
||||||
// a una propiedad, puedes utilizar `willSet` y `didSet`
|
// a una propiedad, puedes utilizar `willSet` y `didSet`
|
||||||
var identifier: String = "defaultID" {
|
var identifier: String = "defaultID" {
|
||||||
// El argumento `willSet` será el nombre de variable para el nuevo valor
|
// El argumento `willSet` será el nombre de variable para el nuevo valor
|
||||||
@@ -368,20 +368,20 @@ internal class Rect: Shape {
|
|||||||
print(someIdentifier)
|
print(someIdentifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init(sideLength: Int) {
|
init(sideLength: Int) {
|
||||||
self.sideLength = sideLength
|
self.sideLength = sideLength
|
||||||
// Siempre poner super.init de último al momento de inicializar propiedades
|
// Siempre poner super.init de último al momento de inicializar propiedades
|
||||||
// personalizadas
|
// personalizadas
|
||||||
super.init()
|
super.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override func getArea() -> Int {
|
override func getArea() -> Int {
|
||||||
return sideLength * sideLength
|
return sideLength * sideLength
|
||||||
}
|
}
|
||||||
@@ -413,13 +413,13 @@ class Circle: Shape {
|
|||||||
override func getArea() -> Int {
|
override func getArea() -> Int {
|
||||||
return 3 * radius * radius
|
return 3 * radius * radius
|
||||||
}
|
}
|
||||||
|
|
||||||
// Un signo de interrogación como sufijo después de `init` es un init opcional
|
// Un signo de interrogación como sufijo después de `init` es un init opcional
|
||||||
// que puede devolver nil
|
// que puede devolver nil
|
||||||
init?(radius: Int) {
|
init?(radius: Int) {
|
||||||
self.radius = radius
|
self.radius = radius
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
if radius <= 0 {
|
if radius <= 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -457,11 +457,11 @@ enum Suit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Los valores de enum permite la sintaxis corta, sin necesidad de poner
|
// Los valores de enum permite la sintaxis corta, sin necesidad de poner
|
||||||
// el tipo del enum cuando la variable es declarada de manera explícita
|
// el tipo del enum cuando la variable es declarada de manera explícita
|
||||||
var suitValue: Suit = .Hearts
|
var suitValue: Suit = .Hearts
|
||||||
|
|
||||||
// Enums de tipo no-entero requiere asignaciones de valores crudas directas
|
// Enums de tipo no-entero requiere asignaciones de valores crudas directas
|
||||||
enum BookName: String {
|
enum BookName: String {
|
||||||
case John = "John"
|
case John = "John"
|
||||||
case Luke = "Luke"
|
case Luke = "Luke"
|
||||||
@@ -474,7 +474,7 @@ enum Furniture {
|
|||||||
case Desk(height: Int)
|
case Desk(height: Int)
|
||||||
// Asociación con String e Int
|
// Asociación con String e Int
|
||||||
case Chair(String, Int)
|
case Chair(String, Int)
|
||||||
|
|
||||||
func description() -> String {
|
func description() -> String {
|
||||||
switch self {
|
switch self {
|
||||||
case .Desk(let height):
|
case .Desk(let height):
|
||||||
@@ -496,7 +496,7 @@ print(chair.description()) // "Chair of Foo with 40 cm"
|
|||||||
//
|
//
|
||||||
|
|
||||||
// `protocol` puede requerir que los tipos tengan propiedades
|
// `protocol` puede requerir que los tipos tengan propiedades
|
||||||
// de instancia específicas, métodos de instancia, métodos de tipo,
|
// de instancia específicas, métodos de instancia, métodos de tipo,
|
||||||
// operadores, y subscripts
|
// operadores, y subscripts
|
||||||
|
|
||||||
|
|
||||||
@@ -514,13 +514,13 @@ protocol ShapeGenerator {
|
|||||||
|
|
||||||
class MyShape: Rect {
|
class MyShape: Rect {
|
||||||
var delegate: TransformShape?
|
var delegate: TransformShape?
|
||||||
|
|
||||||
func grow() {
|
func grow() {
|
||||||
sideLength += 2
|
sideLength += 2
|
||||||
|
|
||||||
// Pon un signo de interrogación después de la propiedad opcional,
|
// Pon un signo de interrogación después de la propiedad opcional,
|
||||||
// método, o subscript para ignorar un valor nil y devolver nil
|
// método, o subscript para ignorar un valor nil y devolver nil
|
||||||
// en lugar de tirar un error de tiempo de ejecución
|
// en lugar de tirar un error de tiempo de ejecución
|
||||||
// ("optional chaining")
|
// ("optional chaining")
|
||||||
if let allow = self.delegate?.canReshape?() {
|
if let allow = self.delegate?.canReshape?() {
|
||||||
// test for delegate then for method
|
// test for delegate then for method
|
||||||
@@ -536,7 +536,7 @@ class MyShape: Rect {
|
|||||||
|
|
||||||
// `extension`: Agrega funcionalidades a tipos existentes
|
// `extension`: Agrega funcionalidades a tipos existentes
|
||||||
|
|
||||||
// Square ahora se "conforma" al protocolo `Printable`
|
// Square ahora se "conforma" al protocolo `Printable`
|
||||||
extension Square: Printable {
|
extension Square: Printable {
|
||||||
var description: String {
|
var description: String {
|
||||||
return "Area: \(self.getArea()) - ID: \(self.identifier)"
|
return "Area: \(self.getArea()) - ID: \(self.identifier)"
|
||||||
@@ -550,7 +550,7 @@ extension Int {
|
|||||||
var customProperty: String {
|
var customProperty: String {
|
||||||
return "This is \(self)"
|
return "This is \(self)"
|
||||||
}
|
}
|
||||||
|
|
||||||
func multiplyBy(num: Int) -> Int {
|
func multiplyBy(num: Int) -> Int {
|
||||||
return num * self
|
return num * self
|
||||||
}
|
}
|
||||||
@@ -589,7 +589,7 @@ prefix func !!! (inout shape: Square) -> Square {
|
|||||||
// Valor actual
|
// Valor actual
|
||||||
print(mySquare.sideLength) // 4
|
print(mySquare.sideLength) // 4
|
||||||
|
|
||||||
// Cambiar la longitud del lado utilizando el operador !!!,
|
// Cambiar la longitud del lado utilizando el operador !!!,
|
||||||
// incrementa el tamaño por 3
|
// incrementa el tamaño por 3
|
||||||
!!!mySquare
|
!!!mySquare
|
||||||
print(mySquare.sideLength) // 12
|
print(mySquare.sideLength) // 12
|
||||||
|
@@ -353,7 +353,7 @@ internal class Rect: Shape {
|
|||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -379,7 +379,7 @@ internal class Rect: Shape {
|
|||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -81,7 +81,7 @@ if someOptionalString != nil {
|
|||||||
if someOptionalString!.hasPrefix("opt") {
|
if someOptionalString!.hasPrefix("opt") {
|
||||||
println("содержит префикс")
|
println("содержит префикс")
|
||||||
}
|
}
|
||||||
|
|
||||||
let empty = someOptionalString?.isEmpty
|
let empty = someOptionalString?.isEmpty
|
||||||
}
|
}
|
||||||
someOptionalString = nil
|
someOptionalString = nil
|
||||||
@@ -107,7 +107,7 @@ anyObjectVar = "Изменять значение на строку не явл
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Комментируйте здесь
|
Комментируйте здесь
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Вложенные комментарии тоже поддерживаются
|
Вложенные комментарии тоже поддерживаются
|
||||||
*/
|
*/
|
||||||
@@ -308,7 +308,7 @@ print(numbers) // [3, 6, 18]
|
|||||||
// Структуры и классы имеют очень похожие характеристики
|
// Структуры и классы имеют очень похожие характеристики
|
||||||
struct NamesTable {
|
struct NamesTable {
|
||||||
let names = [String]()
|
let names = [String]()
|
||||||
|
|
||||||
// Пользовательский индекс
|
// Пользовательский индекс
|
||||||
subscript(index: Int) -> String {
|
subscript(index: Int) -> String {
|
||||||
return names[index]
|
return names[index]
|
||||||
@@ -339,7 +339,7 @@ public class Shape {
|
|||||||
|
|
||||||
internal class Rect: Shape {
|
internal class Rect: Shape {
|
||||||
var sideLength: Int = 1
|
var sideLength: Int = 1
|
||||||
|
|
||||||
// Пользовательский сеттер и геттер
|
// Пользовательский сеттер и геттер
|
||||||
private var perimeter: Int {
|
private var perimeter: Int {
|
||||||
get {
|
get {
|
||||||
@@ -350,12 +350,12 @@ internal class Rect: Shape {
|
|||||||
sideLength = newValue / 4
|
sideLength = newValue / 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ленивая загрузка свойства
|
// Ленивая загрузка свойства
|
||||||
// свойство subShape остается равным nil (неинициализированным),
|
// свойство subShape остается равным nil (неинициализированным),
|
||||||
// пока не вызовется геттер
|
// пока не вызовется геттер
|
||||||
lazy var subShape = Rect(sideLength: 4)
|
lazy var subShape = Rect(sideLength: 4)
|
||||||
|
|
||||||
// Если вам не нужны пользовательские геттеры и сеттеры,
|
// Если вам не нужны пользовательские геттеры и сеттеры,
|
||||||
// но все же хотите запустить код перед и после вызовов геттера или сеттера
|
// но все же хотите запустить код перед и после вызовов геттера или сеттера
|
||||||
// свойств, вы можете использовать `willSet` и `didSet`
|
// свойств, вы можете использовать `willSet` и `didSet`
|
||||||
@@ -365,19 +365,19 @@ internal class Rect: Shape {
|
|||||||
print(someIdentifier)
|
print(someIdentifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init(sideLength: Int) {
|
init(sideLength: Int) {
|
||||||
self.sideLength = sideLength
|
self.sideLength = sideLength
|
||||||
// последним всегда вызывается super.init, когда init с параметрами
|
// последним всегда вызывается super.init, когда init с параметрами
|
||||||
super.init()
|
super.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override func getArea() -> Int {
|
override func getArea() -> Int {
|
||||||
return sideLength * sideLength
|
return sideLength * sideLength
|
||||||
}
|
}
|
||||||
@@ -409,13 +409,13 @@ class Circle: Shape {
|
|||||||
override func getArea() -> Int {
|
override func getArea() -> Int {
|
||||||
return 3 * radius * radius
|
return 3 * radius * radius
|
||||||
}
|
}
|
||||||
|
|
||||||
// Поместите постфиксный знак вопроса после `init` - это и будет опциональная инициализация,
|
// Поместите постфиксный знак вопроса после `init` - это и будет опциональная инициализация,
|
||||||
// которая может вернуть nil
|
// которая может вернуть nil
|
||||||
init?(radius: Int) {
|
init?(radius: Int) {
|
||||||
self.radius = radius
|
self.radius = radius
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
if radius <= 0 {
|
if radius <= 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -469,7 +469,7 @@ enum Furniture {
|
|||||||
case Desk(height: Int)
|
case Desk(height: Int)
|
||||||
// Связать с типами String и Int
|
// Связать с типами String и Int
|
||||||
case Chair(String, Int)
|
case Chair(String, Int)
|
||||||
|
|
||||||
func description() -> String {
|
func description() -> String {
|
||||||
switch self {
|
switch self {
|
||||||
case .Desk(let height):
|
case .Desk(let height):
|
||||||
@@ -508,7 +508,7 @@ protocol ShapeGenerator {
|
|||||||
|
|
||||||
class MyShape: Rect {
|
class MyShape: Rect {
|
||||||
var delegate: TransformShape?
|
var delegate: TransformShape?
|
||||||
|
|
||||||
func grow() {
|
func grow() {
|
||||||
sideLength += 2
|
sideLength += 2
|
||||||
// Размещайте знак вопроса перед опционным свойством, методом
|
// Размещайте знак вопроса перед опционным свойством, методом
|
||||||
@@ -542,7 +542,7 @@ extension Int {
|
|||||||
var customProperty: String {
|
var customProperty: String {
|
||||||
return "Это \(self)"
|
return "Это \(self)"
|
||||||
}
|
}
|
||||||
|
|
||||||
func multiplyBy(num: Int) -> Int {
|
func multiplyBy(num: Int) -> Int {
|
||||||
return num * self
|
return num * self
|
||||||
}
|
}
|
||||||
|
@@ -94,7 +94,7 @@ var unwrappedString: String! = "Value is expected."
|
|||||||
// same as above, but ! is a postfix operator (more syntax candy)
|
// same as above, but ! is a postfix operator (more syntax candy)
|
||||||
var unwrappedString2: ImplicitlyUnwrappedOptional<String> = "Value is expected."
|
var unwrappedString2: ImplicitlyUnwrappedOptional<String> = "Value is expected."
|
||||||
|
|
||||||
// If let structure -
|
// If let structure -
|
||||||
// If let is a special structure in Swift that allows you to check if an Optional rhs holds a value, and in case it does - unwraps and assigns it to the lhs.
|
// If let is a special structure in Swift that allows you to check if an Optional rhs holds a value, and in case it does - unwraps and assigns it to the lhs.
|
||||||
if let someOptionalStringConstant = someOptionalString {
|
if let someOptionalStringConstant = someOptionalString {
|
||||||
// has `Some` value, non-nil
|
// has `Some` value, non-nil
|
||||||
@@ -443,7 +443,7 @@ internal class Rect: Shape {
|
|||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -373,7 +373,7 @@ internal class Rect: Shape {
|
|||||||
|
|
||||||
func shrink() {
|
func shrink() {
|
||||||
if sideLength > 0 {
|
if sideLength > 0 {
|
||||||
--sideLength
|
sideLength -= 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user