English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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
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, 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
O Swift oferece dois alias de tipos especiais para tipos indeterminados:
AnyObject
pode representar exemplos de qualquer tipo de classe.Any
pode representar qualquer tipo, incluindo tipos de métodos (function types).Atenção:
apenas quando você precisar explicitamente de seu comportamento e funcionalidadesAny
eAnyObject
Use sempre o tipo explícito que você espera no seu código. Isso é sempre melhor.
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
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.