olsun.
Bu, özel durum size söylendiği için, çünkü bir value
bir String içerdiğinden ve bir Dize bir Int olarak zorlanamadığı için çalışmaz. Bu String'in bir tamsayıyı temsil etmesi, bir Int'e ayrıştırılması gerektiği için önemli değildir. Bu tam olarak toInt()
yönteminin ne yaptığıdır.
İlk olarak bir Dizeye yayınlamanızın nedeni, toInt()
'un String üzerinde bir uzantı yöntemidir ve value
, Any?
türündedir. Bu, toInt()
'u doğrudan value
numaralı telefondan arayaamayacağınız anlamına gelir, çünkü çalışma zamanında olsa bile derleme zamanında bir Dize içerdiğini bilmez. https://kotlinlang.org/docs/reference/typecasts.html#smart-casts
Bu: Akıllı atmalarını ve burada diğer Kotlin tipi döküm biraz daha fazla bilgi bulabilirsiniz
if (value is String) {
value.toInt()
}
: Bu adımı atlamak istedi, ayrıca ilk türünü kontrol ederek akıllı yayınları kullanabilirsiniz ayrıca temel tasarım problemine işaret ediyor olabilir. Bu durumun bazen'un bir Int içereceğini beklersiniz, ancak burada gördüğünüz gibi bu değeri modelinizde ayarlayan her şey onu bu sayıyı içeren bir String'e ayarlıyor. Bu değerin gerçekten farklı türler içerebileceğini mi düşünüyorsun yoksa sadece Int ve String mi bekliyorsun? İkincisiyse, daha sonra bu bir Any?
yerine bir String yapmak için daha iyi bir tasarım kararı olacaktır. Bu, beklenmedik/işlenmemiş türlerin sağlanmasını engeller ve modele bakarak veya onu kullanan herkese daha az belirsiz olur.
"Int'e doğrudan dökmeyi deneyin" ile ne demek istiyorsunuz? Bunun için kodu göremiyorum. Sadece yapmaya çalıştığınız: 'value.toInt()'? Yoksa açık bir oyuncu kadrosuna mı giriyorsunuz: (Tam sayı) değeri? – PseudoPsyche
Örnekte, "değer" olarak adlandırılan "var" bazen bir Int içeren bir Dize içeriyor gibi görünüyor. Bu durumda, ilk önce onu String'e dökmeniz ve daha sonra yaptığınız gibi 'toInt' yöntemiyle onu ayrıştırmanız gerekir. – zsmb13
@PseudoPsyche Int – pablobu