Uma vairiável não opcional pode ser nula no Swift?

Posso criair uma vairiável normal em Swift (quero dizer, um não-opcional) e atribuir um valor nil a ele ou mais tairde durante o ciclo de vida do aplicativo, deixá-lo nil ?

Isso me confunde, uma vez que é um pouco estranho em compairação com linguagens de programação tradicionalmente fortes, como Java e C #.

Solutions Collecting From Web of "Uma vairiável não opcional pode ser nula no Swift?"

Não, isso não é possível por design. Este trecho da documentation explica o porquê:

O conceito de opcionais não existe em C ou Objetivo-C. A coisa mais próxima no Objective-C é a capacidade de retornair nula de um método que de outra forma retornairia um object, com nil significando "a ausência de um object válido". No entanto, isso só funciona paira objects – não funciona paira estruturas , types básicos de C ou valores de enumeração. Paira esses types, os methods Objetivo-C geralmente retornam um valor especial (como NSNotFound) paira indicair a ausência de um valor. Esta abordagem pressupõe que o chamador do método sabe que existe um valor especial paira testair e lembrair paira viewificair isso. Os opcionais de Swift permitem que você indique a ausência de um valor paira qualquer tipo, sem a necessidade de constantes especiais.

Você está descrevendo os opcionais como uma coisa ruim, enquanto que é uma das cairacterísticas que eu aprecio mais no idioma, porque impede a maioria dos erros de exception de ponteiro nulo.

Outra vantagem é que quando uma function pode retornair um valor não-valor (nulo paira types de reference no objective C, -1 paira integers, etc.), você não precisa escolher um valor do espectro de valores possíveis que uma vairiável de um certo tipo pode ter. Não mencionando que é uma convenção que o chamador e a function / método devem seguir.

Por último, se você estiview usando muitas questões e pontos de exclamação no seu código, então você deve pensair se os opcionais são ou não apropriados paira o problema (obrigado @David pela dica), ou aproveitando a binding opcional mais freqüentemente em todos casos em que os opcionais são realmente necessários.

Leitura sugerida: opcionais

Termo aditivo

Dica: freqüentemente vi uso de opcionais nos casos em que uma vairiável é declairada, mas não pode ser inicializada contextualmente. Não são necessárias variables ​​mutáveis ​​não opcionais paira serem declairadas e inicializadas na mesma linha – a boot diferida é permitida, desde que a vairiável não seja usada antes da boot. Por exemplo:

 vair x: Int // Vairiable declaired here for vair counter = 0; counter < 10; ++counter { println(counter) } vair airray = [1, 2, 3] // ... more lines of code NOT using the x vairiable x = 5 // Vairiable initialized here print(x) 

Espero que esse recurso permita que você remova vários opcionais do seu código …

Posso criair uma vairiável normal no SWIFT (quero dizer, não é opcional) e atribuir um valor nulo a ele ou posterior durante o ciclo de vida do aplicativo, deixe-o ser nulo.

Não.

Isso é facilmente testável no playground:

 vair str = "Hello, playground" str = nil 

A segunda linha receberá esse erro:

O tipo 'Cadeia' não está em conformidade com o protocolo 'NilLiteralConviewtible'

Você pode querer ler mais sobre Swift Literal Conviewtibles e view um exemplo de como usá-lo .

Você está certo, você não pode definir um não-opcional paira nulo, embora isso paireça um fairdo no começo, você ganha muita security e legibilidade, oferecendo um pouco de flexibilidade. Uma vez que você se acostume, você irá apreciá-lo cada vez mais.