Articles of rápidos

Por que não posso passar um Protocol.Type para um parâmetro genérico T.Type?

Eu estava trabalhando com o Swinject e um problema está me incomodando. Eu tenho sido preso por quase um dia inteiro. Eu suspeito que isso se deva ao fato de o Swift ser uma linguagem datilografada, mas não tenho certeza. Eu resumi meu problema neste playground protocol Protocol {} class Class: Protocol {} let test: […]

Função genérica especializada errada é chamada no Swift 3 a partir de uma chamada indireta

Eu tenho código que segue o design geral de: protocol DispatchType {} class DispatchType1: DispatchType {} class DispatchType2: DispatchType {} func doBar(value:D) { print(“general function called”) } func doBar(value:DispatchType1) { print(“DispatchType1 called”) } func doBar(value:DispatchType2) { print(“DispatchType2 called”) } onde, na realidade, o DispatchType é, na verdade, um armazenamento de back-end. As funções doBar são […]

Função genérica usando um nome de tipo no Swift

Em C #, é possível chamar um método genérico especificando o tipo: public T f() { return something as T } var x = f() O Swift não permite que você especialize um método genérico ao chamá-lo. O compilador quer confiar na inferência de tipos, portanto, isso não é possível: func f() -> T? { […]

Escapando fechamentos em Swift

Eu sou novo em Swift e estava lendo o manual quando me deparei com o fechamento de fugas. Eu não recebi a descrição do manual. Alguém poderia me explicar o que escapam closures estão em Swift em termos simples.

Qual é a causa desse tipo de erro?

Duas questões: Por que esse código não consegue compilar? Eu acredito (mas não tenho 100% de certeza, eu posso ter cometido um erro) que é correto para o tipo. O que significa a mensagem de erro? Estou confuso porque o tipo de argumento esperado é _ -> _ (ou talvez eu não saiba o que […]

Genéricos Swift que não preservam o tipo

Estou tentando converter e / ou gerar uma variável com base no tipo genérico especificado. Eu entendo que não há nenhum tipo de apagamento em swift, mas ele não parece ser o tipo genérico preservar diferente das condições especificadas do genérico, por exemplo, em conformidade com uma class base. Parece que tudo que eu posso […]

Calcule a idade da data de nascimento usando NSDateComponents no Swift

Estou tentando calcular a idade de birthdayDate no Swift com esta function: var calendar : NSCalendar = NSCalendar.currentCalendar() var dateComponentNow : NSDateComponents = calendar.components( NSCalendarUnit.CalendarUnitYear, fromDate: birthday, toDate: age, options: 0) Mas eu recebo um erro Extra argument toDate in call No objective c este era o código, mas não sei porque recebo este erro: […]

Usando uma variável de tipo em um genérico

Eu tenho essa pergunta, exceto por Swift. Como eu uso uma variável Type em um genérico? Eu tentei isso: func intType() -> Int.Type { return Int.self } func test() { var t = self.intType() var arr = Array() // Error: “‘t’ is not a type”. Uh… yeah, it is. } Isso não funcionou: var arr […]

Como faço para declarar uma variável que possui um tipo e implementa um protocolo?

Meu aplicativo tem um protocolo para controladores de exibição de detalhes, afirmando que eles devem ter uma propriedade viewModel : protocol DetailViewController: class { var viewModel: ViewModel? {get set} } Eu também tenho algumas classs diferentes que implementam o protocolo: class FormViewController: UITableViewController, DetailViewController { // … } class MapViewController: UIViewController, DetailViewController { // … […]

Estender os tipos de matriz usando a cláusula where no Swift

Eu gostaria de usar o framework Accelerate para estender [Float] e [Double], mas cada um deles requer uma implementação diferente. Eu tentei o óbvio: extension Array { } e obtenha este erro: “Extensão restrita deve ser declarada no tipo genérico não especializado ‘Array’ com restrições especificadas por uma cláusula ‘where’” É possível estender tipos genéricos […]