Sintaxis básica de Swift

En el capítulo anterior ya vimos cómo crear el programa "Hello, World!" en Swift. Ahora repasemos.

Si se crea un playground de OS X, se necesita importar Cocoa:

Ejemplo

import Cocoa

/* Mi primer programa Swift */
var myString = "Hello, World!"

print(myString)

Si queremos crear un playground de iOS, entonces necesitamos importar UIKit:

Ejemplo

import UIKit

var myString = "Hello, World!"
print(myString)

Al ejecutar el programa anterior, el resultado de salida es:

Hello, World! 

El código anterior es la estructura básica de un programa Swift. A continuación, explicaremos en detalle los componentes de esta estructura.


Importación en Swift

Podemos usar la declaraciónimportimport para importar cualquier framework de Objective-C (o biblioteca de C) en un programa Swift. Por ejemplo:import cocoaLa declaración importa la biblioteca Cocoa y sus API, y podemos usarlos en programas Swift.

Cocoa en sí está escrita en Objective-C, y Objective-C es un superconjunto estricto de C, por lo que en aplicaciones Swift podemos mezclar fácilmente código en C, e incluso código en C++.


Tokens de Swift

Un programa Swift está compuesto por varios tokens. Un token puede ser una palabra, un identificador, una constante, una cadena o un símbolo. Por ejemplo, el siguiente programa Swift consta de tres tokens:

print("test!")

La declaración anterior consta de 3 tokens: la palabraprint, el símbolo( ), la cadena"test"。

print
(
   "test!"
)

Sentencias y expresiones

El código en Swift se compone de sentencias y expresiones.

Las sentencias realizan operaciones específicas, mientras que las expresiones evalúan y devuelven un valor.

Ejemplo

let message = "Hello, Swift!"  // Declaración
print(message)                // Sentencia de expresión

// Ejemplo de expresión
let sum = 5 + 3               // 5 + 3 es una expresión, devuelve 8
let isGreater = sum > 5       // sum > 5 es una expresión, devuelve true

Comentarios

Swift admite comentarios de una sola línea y comentarios de varias líneas. Los comentarios se utilizan para explicar la funcionalidad y la lógica del código.

Los comentarios de Swift son muy similares a los de C. Los comentarios de una sola línea comienzan con dos barras diagonales:

// Esto es un comentario de una línea

Los comentarios de varias líneas comienzan con /* y terminan con */:

/* Esto también es un comentario,
pero abarca varias líneas */

A diferencia de los comentarios multilínea en C, los comentarios multilínea de Swift se pueden anidar dentro de otros comentarios multilínea. La forma de hacerlo es insertar otro comentario multilínea dentro de un bloque de comentario multilínea. Cuando se cierra el segundo bloque de comentario, el primer bloque continúa después:

/* Este es el comienzo del primer comentario multilínea

/* Este es el segundo comentario multilínea anidado */

Este es el final del primer comentario multilínea */

El anidamiento de comentarios multilínea te permite comentar bloques de código de forma más rápida y conveniente, incluso si el bloque de código ya contiene comentarios.

Ejemplo

// Esto es un comentario de una sola línea
let age = 25

/*
Esto es un comentario multilínea
Puede abarcar varias líneas
Se utiliza para explicar en detalle la funcionalidad del código
*/

let name = "Zhang San"

// Los comentarios también se pueden anidar
/*
Comentario exterior
/* Comentario interior */

Sigue siendo el comentario exterior
*/

Punto y coma

A diferencia de otros lenguajes, Swift no requiere el uso de punto y coma al final de cada sentencia;, pero cuando escribes varias sentencias en la misma línea, debes separarlas con punto y coma:

// 一般情况下不需要分号
let x = 10
let y = 20

// 在同一行写多个语句时需要分号
let a = 1; let b = 2; let c = 3

// 在某些复杂表达式中可以提高可读性
let result = calculate(); process(result)

Identificadores

Los identificadores son nombres asignados a variables, constantes, métodos, funciones, enumeraciones, estructuras, clases, protocolos, etc.

Las letras que constituyen un identificador deben seguir ciertas reglas. Las reglas de nomenclatura de identificadores en Swift son las siguientes:

  • Se distingue entre mayúsculas y minúsculas; Myname y myname son dos identificadores diferentes;
  • El primer carácter de un identificador puede ser un guion bajo_o una letra, pero no puede ser un número;
  • Los demás caracteres del identificador pueden ser guiones bajos_, letras o números.

Por ejemplo: userName, User_Name, _sys_val, altura, etc. son identificadores válidos, mientras que 2mail, room# y class son identificadores no válidos.

Convenciones de nomenclatura:

  • Usar la convención de nombres camelCase (camelCase)
  • Los nombres de variables y funciones comienzan con minúscula
  • Los nombres de tipos comienzan con mayúscula
  • Las constantes pueden usar todo en mayúsculas (separadas por guiones bajos)
// 好的命名示例
let userAge = 25
let maxRetryCount = 3
let isUserLoggedIn = true
let serverURL = "https://api.example.com"

// 避免的命名示例
let a = 25              // 不清楚含义
let temp = 3            // 缩写不明确
let flag = true         // 不具体
let url1 = "..."        // 数字后缀不好

Nombres de valores booleanos:

// 使用疑问词开头
let isEmpty = true
let isVisible = false
let hasChildren = true
let canEdit = false
let shouldRefresh = true
let willAppear = false

Nota:Las letras en Swift utilizan la codificación Unicode. Unicode se llama sistema de codificación unificado; incluye codificaciones para escrituras asiáticas como chino, japonés, coreano, e incluso los emoticonos que usamos en las herramientas de chat.

Si de todos modos se debe usar una palabra clave como identificador, se pueden agregar signos de acento grave antes y después de la palabra clave`, por ejemplo:

let `class` = "Ejemplo"

Constantes y variables

Las palabras clave let y var

Constantes (let):

// 声明常量
let maximumNumberOfLoginAttempts = 10
let welcomeMessage = "欢迎使用Swift"

// 常量一旦赋值就不能更改
// maximumNumberOfLoginAttempts = 5  // 错误!不能修改常量

// 延迟初始化常量
let username: String
if userIsLoggedIn {
    username = "用户A"
} else {
    username = "访客"
}
// username 只能赋值一次

Variables (var):

// 声明变量
var currentLoginAttempt = 0
var friendlyWelcome = "Hello!"

// 变量可以修改
currentLoginAttempt = 1
friendlyWelcome = "Bonjour!"

// 变量可以多次赋值
var temperature = 25.0
temperature = 30.0
temperature = 22.5

Palabras clave

Las palabras clave son secuencias de caracteres reservadas similares a los identificadores; no pueden usarse como identificadores a menos que se encierren con signos de acento grave`para encerrarlas, de lo contrario no se pueden usar como identificadores. Las palabras clave son identificadores reservados predefinidos que tienen un significado especial para el compilador.

Las palabras clave comunes incluyen los siguientes 4 tipos.

Palabras clave relacionadas con declaraciones

class deinit enum extension
func import init internal
let operator private protocol
public static struct subscript
typealias var

Palabras clave relacionadas con sentencias

break case continue default
do else fallthrough for
if in return switch
where while

Palabras clave de expresiones y tipos

as dynamicType false is
nil self Self super
true _COLUMN_ _FILE_ _FUNCTION_
_LINE_

Palabras clave utilizadas en contextos específicos

associativity convenience dynamic didSet
final get infix inout
lazy left mutating none
nonmutating optional override postfix
precedence prefix Protocol required
right set Type unowned
weak willSet

Espacios en Swift

El lenguaje Swift no ignora por completo los espacios como C/C++ o Java. Swift tiene ciertos requisitos sobre el uso de espacios, pero no es tan estricto como Python con la indentación.

En Swift, los operadores no pueden seguir directamente a una variable o constante. Por ejemplo, el siguiente código dará un error:

let a= 1 + 2

El mensaje de error es:

error: prefix/postfix '=' is reserved

Significa aproximadamente que el uso del signo igual directamente antes o después está reservado.

El siguiente código también dará un error (sigue prestando atención a los espacios):

let a = 1+ 2

El mensaje de error es:

error: consecutive statements on a line must be separated by ';'

Esto se debe a que Swift considera que la sentencia termina en 1+, y 2 es la siguiente sentencia.

Solo de esta manera no dará error:

let a = 1 + 2;  // 编码规范推荐使用这种写法
let b = 3+4 // 这样也是OK的

Literales en Swift

Los llamados literales son valores como números específicos, cadenas o valores booleanos que pueden indicar directamente su tipo y asignarse a variables. Por ejemplo, a continuación:

42                 // 整型字面量
3.14159            // 浮点型字面量
"Hello, world!"    // 字符串型字面量
true               // 布尔型字面量

Impresión de salida

Swift usa la función print para imprimir la salida:

print("Ejemplo") // 输出 Ejemplo

La función print es una función global; su firma completa es:

public func print(items: Any..., separator: String = default, terminator: String = default)

Si queremos que la salida no haga un salto de línea, solo tenemos que asignar una cadena vacía al último parámetro:

for x in 0...10{
    print("\(x) ", terminator: "")
}
print()

El resultado de salida es:

0 1 2 3 4 5 6 7 8 9 10 

Si necesitas recibir entrada del usuario, puedes usarreadLine():

let theInput = readLine()
Otras extensiones