Tamam, bu konuyla ilgili neden bu kadar kafamın karıştığını hızlı bir şekilde belirtebileceğinizi hissediyorum, ancak aşağıdakilerin neden bir derleyiciye OLMASI ile ilgili bir sorum var hata veya uyarı:Objective-C Tür Çıkarımı
NSString * intValue = [ NSString stringWithFormat:@"int = %i", [ [ self.selectedObject valueForKey:name ] integerValue ] ];
selectedObject
bir NSObject
ve name
tip int
bir @property
ismi olur. Beni şaşkınlığa düşüren nedir
derleyici [ self.selectedObject valueForKey:name ]
dönüşü sonucu integerValue
çağrısı ile zincirine sırayla mesajı (bunu typecasting olmadan) tip NSNumber *
ait olduğunu varsaymak mükemmel istekli olmasının nedeni budur.
Açıkçası, KVC NSNumber
içine olmayan nesne "sayı" türlerini tamamladı fakat derleyici -valueForKey:
bu özel durumda bir NSNumber *
döneceğini bilmek için hiçbir yolu yoktur.
Neden "id
'-integerValue
' 'yanıtı boyunca bir derleyici uyarısı ile sonuçlanmıyor?"?
Teşekkürler! Objective-C'de ayrıcalıklı bir tür olan 'id' ile ilgili bir his vardı. :) Eğilimim her zaman DAİMA sık sık şeyler yazın, bu yüzden bu garip davranışla hiç karşılaşmadım. Sanırım bu 'id' hem güçlü hem de tehlikeli. Derleyiciye "id" ile ilgili bazı bağlamlar sunmak için daha iyi bir yöntem olup olmadığını ya da "id" nin ne olacağı konusunda olumluysanız (örneğin benim örneğimde olduğu gibi) bunu bırakmak güzel bir şey olup olmadığını merak ediyorum . – LucasTizma
Başlığın kuralı şöyledir: “Gerektiğinde Nerede Mümkün, Dinamik Yazma Statik Yazma.” (Daha fazla bilgi almak için Google'a sahip olabilirsiniz.) Bu durumda, ben tahmin yapmazdım, sadece ifadeyi okumak zorlaşır. Bazen derleyicinin doğru yöntemi seçmesine yardımcı olması için yazım yapmanız gerekir - bkz. Http://stackoverflow.com/questions/1113270. – zoul
Bağlantı için teşekkürler. Mevcut SDK yöntem adlarıyla "çakışmaya" yol açan bir yöntem adlandırma sonucunda bazı küçük hatalarla karşılaştım. Derleyicinin bana deli olduğunu düşündüm. :) Ve evet, ben tamamen "Gerektiğinde Statik Yazma, Gerektiğinde Dinamik Yazma" felsefesinin bir yandaşıyım. Şimdi sadece Objective-C yazılan koleksiyonlar için destek eklerse ... Görünüşe göre daha sık görülmektense, koleksiyonlarımın ne saklayacağını biliyorum. – LucasTizma