abcdefg12345
Pôster original- 10 de julho de 2013
- 21 de outubro de 2017
rápido 4
Código:
if (Double(MyValue) > 10) { // value is bigger than 10 } else { // do something else }
estou usando uma string variável porque preciso que seja uma string para poder formatá-la mais tarde, eu a defini como
Código:
var MyValue = ''
abcdefg12345
Pôster original- 10 de julho de 2013
- 21 de outubro de 2017
Código:
let CheckValue = Double(MyValue)! if CheckValue > 10 { }
0002378
Suspenso
- 28 de maio de 2017
- 23 de outubro de 2017
E, embora os opcionais tenham seus benefícios, eles também me fazem querer quebrar meu computador contra as bordas superiores de uma lixeira.
No entanto, onde Swift realmente arrasa é no departamento de encerramentos ... ah, sim! Java também os tem, agora, mas ...
E, claro, o fato de Swift ser menos rigoroso na declaração de tipos e aqueles pontos-e-vírgulas irritantes ... incrível!
Reações:abcdefg12345
0002378
Suspenso
- 28 de maio de 2017
- 24 de outubro de 2017
Você não precisa de uma nova variável. Você pode apenas adicionar '!' ao seu Double (string), e funcionará.
Acho que estava errado sobre Swift ser estúpido neste caso. Mas, eu encontrei muitos casos de reclamações do compilador (incapaz de comparar dois tipos numéricos diferentes).
Greene
- 15 de julho de 2015
- Fort Worth
- 24 de outubro de 2017
Ou você pode usar ligação opcional para desembrulhar o valor. Eu tentaria um desses métodos primeiro, antes de usar um desembrulhamento forçado
gnasher729
Suspenso
- 25 de novembro de 2005
- 24 de outubro de 2017
maculateConception disse: Eu acho que o Swift, como linguagem, é bastante risível às vezes, esp. vindo da programação Java. E você trouxe um dos melhores exemplos disso.Isso é totalmente sem noção. O problema é que o OP não conhece um recurso básico do Swift, que são os valores opcionais. O construtor Double (String) pode obviamente falhar se a String não contiver um número. É por isso que Double (String) não produz e não pode produzir um resultado do tipo Double, mas um do tipo Double? , que é um Double opcional. E um Double opcional não pode ser comparado com um Int.
Sua 'solução' é realmente terrível. O ! significa 'Tenho certeza de que essa conversão será bem-sucedida. Se isso não acontecer, bloqueie o aplicativo '. deixe d = Double ('1234x')! vai apenas falhar. Intencionalmente. Porque você não marcou nulo e foi nulo.
A maneira correta é verificar o erro. Por exemplo
se d = Double (MyValue), d> 10 {
// MeuValor continha um número e o número é> 10.
} outro {
// MeuValor não continha um número, ou o número era<= 10.
}
Se você acha que vale a pena escrever um código que seja seguro e realmente funcione, Swift é a linguagem certa.
0002378
Suspenso
- 28 de maio de 2017
- 24 de outubro de 2017
gnasher729 disse: Isso é completamente sem noção. O problema é que o OP não conhece um recurso básico do Swift, que são os valores opcionais. O construtor Double (String) pode obviamente falhar se a String não contiver um número. É por isso que Double (String) não produz e não pode produzir um resultado do tipo Double, mas um do tipo Double? , que é um Double opcional. E um Double opcional não pode ser comparado com um Int.
Você foi intimidado na escola? Você parece ter uma auto-estima bastante baixa porque não conseguia responder sem me atacar.
Esta será minha primeira e última comunicação com você. Sugestão para você - tente se comunicar de uma forma mais civilizada e a vida será ótima. Tome cuidado.
Greene
- 15 de julho de 2015
- Fort Worth
- 25 de outubro de 2017
gnasher729 disse: A maneira correta é verificando o erro. Por exemplo
se d = Double (MyValue), d> 10 {
// MeuValor continha um número e o número é> 10.
} outro {
// MeuValor não continha um número, ou o número era<= 10.
}
Isso é ambíguo - e se o valor for<= 10 should produce different results from the value being nil? To be fair, the OP's post is ambiguous as they were forcing the unwrap, meaning a nil value would crash. However in most business cases, a nil value would be handled differently (safely) from an insufficient value.
Uma maneira muito mais limpa seria:
Código:
// Handle your unwrapping here, and specify what to do in case of a nil guard let d = Double(MyValue) else { return } // Then implement your if statement if d > 10 { // Do what you want if d > 10 } else { // Do what you want if d <= 10 }
Embora, eu realmente acho que MyValue deve ser armazenado como um Double desde o início, e um NumberFormatter implementado mais tarde para lidar com qualquer formatação necessária. Isso tem uma carga cognitiva muito menor para quem acaba lendo o código.
gnasher729
Suspenso
- 25 de novembro de 2005
- 26 de outubro de 2017
maculateConception disse: Você foi intimidado na escola? Você parece ter uma auto-estima bastante baixa porque não conseguia responder sem me atacar.
Esta será minha primeira e última comunicação com você. Sugestão para você - tente se comunicar de uma forma mais civilizada e a vida será ótima. Tome cuidado.
Bem, eu não te ataquei. Ataquei sua postagem, que demonstra que você sabe muito pouco sobre Swift, e incluí uma recomendação muito perigosa. S
SAIRUS
para
- 21 de agosto de 2008
- 26 de outubro de 2017
inserir
- 14 de abril de 2018
- 14 de abril de 2018
1) '!' você pode indicar que este valor será exato adicionando a marca.
Código:
if (Double(MyValue)! > 10) { // }
2) Você pode especificar o tipo ao definir o valor. Código:
let value: Int = Double(MyValue)! if (value > 10) { // }
PARA atmenterprises
- 28 de janeiro de 2006
- 27 de abril de 2018
ynstek disse: Swift, não tenho certeza se seu valor é exatamente int. Existem duas opções para garantir.
1) '!' você pode indicar que este valor será exato adicionando a marca.
Código:if (Double(MyValue)! > 10) { // }
2) Você pode especificar o tipo ao definir o valor.
Código:let value: Int = Double(MyValue)! if (value > 10) { // }
Acho que seu exemplo nº 2 falhará porque você está tentando atribuir um elenco de string a um double para uma variável Int. Além disso, você está assumindo que MyValue não é nulo, o que pode causar um erro de tempo de execução caso seja nulo ou não numérico.
Seu exemplo de explicação nº 1 também não está certo. Um ponto de exclamação não converte um valor em um Int. Ele desembrulha o valor de uma variável opcional. Em seu exemplo, você terminaria com um valor Double, não um Int, e somente se MyValue não fosse nulo ou um valor não numérico.
Publicações Populares