English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Conversão de Tipo Swift

A conversão de tipo no Swift pode determinar o tipo do exemplo. Também pode ser usado para verificar se o tipo do exemplo pertence a um exemplo de classe pai ou subclasses.

A conversão de tipo no Swift é implementada pelos operadores is e as, is é usado para detectar o tipo de valor, as é usado para converter o tipo.

A conversão de tipo também pode ser usada para verificar se uma classe implementou um protocolo.

Definir uma hierarquia de classes

A seguir estão definidas três classes: Subjects, Chemistry, Maths, Chemistry e Maths herdam de Subjects.

O código é o seguinte:

class Assuntos {
    var física: String
    init(física: String) {
        self.física = física
    }
}
class Química: Assuntos {
    var equações: String
    init(física: String, equações: String) {
        self.equações = equações
        super.init(física: physics)
    }
}
class Matemática: Assuntos {
    var fórmulas: String
    init(física: String, fórmulas: String) {
        self.fórmulas = fórmulas
        super.init(física: physics)
    }
}
let sa = [
    Química (física: "Física dos sólidos", equações: "Hertz")?,
    Maths(physics: "Dinâmica de fluidos", formulae: "Gigahertz")
let samplechem = Química(física: "Física dos sólidos", equações: "Hertz")
print("Física do exemplo é: \(samplechem.física)")
print("Equação do exemplo é: \(samplechem.equações)")
let samplemaths = Matemática(física: "Dinâmica dos fluidos", equações: "Terahertz")
print("Física do exemplo é: \(samplemaths.física)")
print("Fórmula do exemplo é: \(samplemaths.equações)")

O resultado de execução do programa acima é:

O exemplo de física é: Física de Sólidos
O exemplo de equação é: Hertz
O exemplo de física é: Dinâmica de Fluidos
A fórmula de exemplo é: Gigahertz

Verificação de tipo

Conversão de tipo é usada para detectar se o tipo do exemplo pertence a um tipo de exemplo específico.

Você pode usá-lo na hierarquia de classes e subclasses, verificar o tipo de exemplo específico da classe e converter o exemplo da classe para outro tipo na hierarquia.

Verificação de tipo de tipo usa é palavra-chave.

operador é Para verificar se um exemplo pertence a um subtipo específico. Se o exemplo pertencer a esse subtipo, o operador de verificação de tipo retorna true, caso contrário retorna false.

class Assuntos {
    var física: String
    init(física: String) {
        self.física = física
    }
}
class Química: Assuntos {
    var equações: String
    init(física: String, equações: String) {
        self.equações = equações
        super.init(física: physics)
    }
}
class Matemática: Assuntos {
    var fórmulas: String
    init(física: String, fórmulas: String) {
        self.fórmulas = fórmulas
        super.init(física: physics)
    }
}
let sa = [
    Química (física: "Física dos sólidos", equações: "Hertz")?,
    Matemática (física: "Dinâmica de fluidos", fórmulas: "Gigahertz")?,
    Química (física: "Termodinâmica", equações: "Decibel")?,
    Matemática(física: "Física celeste", equações: "Gigahertz"),}
    Matemática(física: "Equações diferenciais", equações: "Senoide")]
let samplechem = Química(física: "Física dos sólidos", equações: "Hertz")
print("Física do exemplo é: \(samplechem.física)")
print("Equação do exemplo é: \(samplechem.equações)")
let samplemaths = Matemática(física: "Dinâmica dos fluidos", equações: "Terahertz")
print("Física do exemplo é: \(samplemaths.física)")
print("Fórmula do exemplo é: \(samplemaths.equações)")
var chemCount = 0
var mathsCount = 0
for item in sa {
    // Se é um exemplo do tipo Chemistry, retorna true, caso contrário retorna false.
    if item is Chemistry {
        ++chemCount
    } else if item is Maths {
        ++mathsCount
    }
}
print("A disciplina de química contém \(chemCount) tópicos, matemática contém \(mathsCount) tópicos")

O resultado de execução do programa acima é:

O exemplo de física é: Física de Sólidos
O exemplo de equação é: Hertz
O exemplo de física é: Dinâmica de Fluidos
A fórmula de exemplo é: Gigahertz
os assuntos de química incluem 2 de tópicos, matemática inclui 3 de tópicos

A转型的 downward

A转型的 downward, usando o operador de conversão de tipo (as? ou as!)

Quando você não estiver certo de que a转型的 downward será bem-sucedida, use a forma condicional de tipo conversão (as?). A conversão condicional de tipo sempre retorna um valor opcional (valor opcional) e, se a转型的 downward não for possível, o valor opcional será nil.

Use a forma forçada (as!) apenas quando você puder garantir que a转型的 downward será bem-sucedida. Quando você tentar transformar para um tipo incorreto, a conversão forçada de tipo triggering um erro de tempo de execução.

class Assuntos {
    var física: String
    init(física: String) {
        self.física = física
    }
}
class Química: Assuntos {
    var equações: String
    init(física: String, equações: String) {
        self.equações = equações
        super.init(física: physics)
    }
}
class Matemática: Assuntos {
    var fórmulas: String
    init(física: String, fórmulas: String) {
        self.fórmulas = fórmulas
        super.init(física: physics)
    }
}
let sa = [
    Química (física: "Física dos sólidos", equações: "Hertz")?,
    Matemática (física: "Dinâmica de fluidos", fórmulas: "Gigahertz")?,
    Química (física: "Termodinâmica", equações: "Decibel")?,
    Matemática(física: "Física celeste", equações: "Gigahertz"),}
    Matemática(física: "Equações diferenciais", equações: "Senoide")]
let samplechem = Química(física: "Física dos sólidos", equações: "Hertz")
print("Física do exemplo é: \(samplechem.física)")
print("Equação do exemplo é: \(samplechem.equações)")
let samplemaths = Matemática(física: "Dinâmica dos fluidos", equações: "Terahertz")
print("Física do exemplo é: \(samplemaths.física)")
print("Fórmula do exemplo é: \(samplemaths.equações)")
var chemCount = 0
var mathsCount = 0
for item in sa {
    // Forma de conversão de tipo condicional
    if let show = item as? Química {
        print("Tema químico é: '\(show.física)', \(show.equações)")
        // Forma forçada
    } else if let example = item as? Matemática {
        print("Tema matemático é: '\(example.física)', \(example.equações)")
    }
}

O resultado de execução do programa acima é:

O exemplo de física é: Física de Sólidos
O exemplo de equação é: Hertz
O exemplo de física é: Dinâmica de Fluidos
A fórmula de exemplo é: Gigahertz
O tema de química é: 'Física de Sólidos', Hertz
O tema matemático é: 'Dinâmica de Fluidos', Gigahertz
O tema de química é: 'Física de Sólidos', Decibéis
O tema de química é: 'Física Termoquímica', Megahertz
O tema matemático é: 'Equações Diferenciais', Série de Cosenos

Conversão de tipos de Any e AnyObject

O Swift oferece dois alias de tipos especiais para tipos indeterminados:

  • AnyObjectpode representar exemplos de qualquer tipo de classe.
  • Anypode representar qualquer tipo, incluindo tipos de métodos (function types).

Atenção:
apenas quando você precisar explicitamente de seu comportamento e funcionalidadesAnyeAnyObjectUse sempre o tipo explícito que você espera no seu código. Isso é sempre melhor.

Exemplo de Any

class Assuntos {
    var física: String
    init(física: String) {
        self.física = física
    }
}
class Química: Assuntos {
    var equações: String
    init(física: String, equações: String) {
        self.equações = equações
        super.init(física: physics)
    }
}
class Matemática: Assuntos {
    var fórmulas: String
    init(física: String, fórmulas: String) {
        self.fórmulas = fórmulas
        super.init(física: physics)
    }
}
let sa = [
    Química (física: "Física dos sólidos", equações: "Hertz")?,
    Matemática (física: "Dinâmica de fluidos", fórmulas: "Gigahertz")?,
    Química (física: "Termodinâmica", equações: "Decibel")?,
    Matemática(física: "Física celeste", equações: "Gigahertz"),}
    Matemática(física: "Equações diferenciais", equações: "Senoide")]
let samplechem = Química(física: "Física dos sólidos", equações: "Hertz")
print("Física do exemplo é: \(samplechem.física)")
print("Equação do exemplo é: \(samplechem.equações)")
let samplemaths = Matemática(física: "Dinâmica dos fluidos", equações: "Terahertz")
print("Física do exemplo é: \(samplemaths.física)")
print("Fórmula do exemplo é: \(samplemaths.equações)")
var chemCount = 0
var mathsCount = 0
for item in sa {
    // Forma de conversão de tipo condicional
    if let show = item as? Química {
        print("Tema químico é: '\(show.física)', \(show.equações)")
        // Forma forçada
    } else if let example = item as? Matemática {
        print("Tema matemático é: '\(example.física)', \(example.equações)")
    }
}
// pode armazenar vetores de tipos Any
var exampleany = [Qualquer]()
exampleany.append(12)
exampleany.append(3.14159)
exampleany.append("Qualquer exemplo")
exampleany.append(Química(física: "Física dos sólidos", equações: "Gigahertz"))
for item2 in exampleany {
    switch item2 {
    case let someInt as Int:
        print("Valor inteiro é \(someInt)")
    case let someDouble as Double where someDouble > 0:
        print("Pi valor é \(someDouble)")
    case let someString as String:
        print("\(someString)")
    case let phy as Chemistry:
        print("Tema '\(phy.physics)', \(phy.equations)")
    default:
        print("None")
    }
}

O resultado de execução do programa acima é:

O exemplo de física é: Física de Sólidos
O exemplo de equação é: Hertz
O exemplo de física é: Dinâmica de Fluidos
A fórmula de exemplo é: Gigahertz
O tema de química é: 'Física de Sólidos', Hertz
O tema matemático é: 'Dinâmica de Fluidos', Gigahertz
O tema de química é: 'Física de Sólidos', Decibéis
O tema de química é: 'Física Termoquímica', Megahertz
O tema matemático é: 'Equações Diferenciais', Série de Cosenos
O valor inteiro é 12
O valor de Pi é 3.14159
Exemplo de Any
Tema 'Física de Sólidos', Megahertz

Exemplo AnyObject

class Assuntos {
    var física: String
    init(física: String) {
        self.física = física
    }
}
class Química: Assuntos {
    var equações: String
    init(física: String, equações: String) {
        self.equações = equações
        super.init(física: physics)
    }
}
class Matemática: Assuntos {
    var fórmulas: String
    init(física: String, fórmulas: String) {
        self.fórmulas = fórmulas
        super.init(física: physics)
    }
}
// vetor de tipos AnyObject
let saprint: [AnyObject] = [
    Química (física: "Física dos sólidos", equações: "Hertz")?,
    Matemática (física: "Dinâmica de fluidos", fórmulas: "Gigahertz")?,
    Química (física: "Termodinâmica", equações: "Decibel")?,
    Matemática(física: "Física celeste", equações: "Gigahertz"),}
    Matemática(física: "Equações diferenciais", equações: "Senoide")]
let samplechem = Química(física: "Física dos sólidos", equações: "Hertz")
print("Física do exemplo é: \(samplechem.física)")
print("Equação do exemplo é: \(samplechem.equações)")
let samplemaths = Matemática(física: "Dinâmica dos fluidos", equações: "Terahertz")
print("Física do exemplo é: \(samplemaths.física)")
print("Fórmula do exemplo é: \(samplemaths.equações)")
var chemCount = 0
var mathsCount = 0
for item in saprint {
    // Forma de conversão de tipo condicional
    if let show = item as? Química {
        print("Tema químico é: '\(show.física)', \(show.equações)")
        // Forma forçada
    } else if let example = item as? Matemática {
        print("Tema matemático é: '\(example.física)', \(example.equações)")
    }
}
var exampleany = [Qualquer]()
exampleany.append(12)
exampleany.append(3.14159)
exampleany.append("Qualquer exemplo")
exampleany.append(Química(física: "Física dos sólidos", equações: "Gigahertz"))
for item2 in exampleany {
    switch item2 {
    case let someInt as Int:
        print("Valor inteiro é \(someInt)")
    case let someDouble as Double where someDouble > 0:
        print("Pi valor é \(someDouble)")
    case let someString as String:
        print("\(someString)")
    case let phy as Chemistry:
        print("Tema '\(phy.physics)', \(phy.equations)")
    default:
        print("None")
    }
}

O resultado de execução do programa acima é:

O exemplo de física é: Física de Sólidos
O exemplo de equação é: Hertz
O exemplo de física é: Dinâmica de Fluidos
A fórmula de exemplo é: Gigahertz
O tema de química é: 'Física de Sólidos', Hertz
O tema matemático é: 'Dinâmica de Fluidos', Gigahertz
O tema de química é: 'Física de Sólidos', Decibéis
O tema de química é: 'Física Termoquímica', Megahertz
O tema matemático é: 'Equações Diferenciais', Série de Cosenos
O valor inteiro é 12
O valor de Pi é 3.14159
Exemplo de Any
Tema 'Física de Sólidos', Megahertz

Use a forma forçada do operador de conversão de tipo (as, em vez de as?) em um caso de uma sentença switch para verificar e converter para um tipo explícito.