2015-11-22 29 views
6

Her şeyden önce ben sadece Swift ile oynamaya başladım ve gerçekten çok fazla kod yazılmadığını gördüm ama tüm öğreticiler I Diğer bazı dillerde olduğu gibi özel kullanmadıklarını ve Swift'in üç erişim denetimi, Private, Public ve Internal, Internal varsayılanı olduğunu anladıklarını gördüm.Neden Swift özel bir özellik/yöntem kullanımı yaygın değildir

Biraz kafam karışık ve genel olarak çok fazla programlama deneyimim olmamasına rağmen, benim anlayışım, bir programda her şeyi özel kılıyor ve yalnızca istediğiniz özellikleri ve yöntemleri herkese açık hale getiriyordu diğer sınıflara maruz kalmak. Elma Dokümanlar erişim kontrolü, çeşitli düzeylerde sunan ek olarak

itibaren

, Swift tipik senaryolar için varsayılan erişim düzeylerini sağlayan tarafından açık erişim denetim seviyelerini belirtme ihtiyacını azaltır. Gerçekten de, tek hedefli bir uygulama yazıyorsanız, kesinlikle erişim denetimi düzeylerini belirtmeniz gerekmeyebilir. Varsayılan (Internal) temelde doğru onların değerlerine diğer sınıflara erişim sağlayarak gibi her özellik/yöntem bırakarak Bana göre

?

Neden Swift/Cocoa'da programınızın diğer bölümlerinin erişime sahip olmasını istemediğiniz özellikler için nadiren Private erişimcisinin kullanımını görüyorsunuz?

Genelde konsept erişimcilerini çok nazik ve açıklayabilir misiniz ve neden Swift bu şekilde tasarlandı, ya da yukarıda yaptığım varsayımda yanılıyorsam daha iyi bir düzeltme yapabilirim. OOP'taki çok deneyim ve genel olarak erişimciler kavramı üzerinde kafa karışıklığı olabilir.

Teşekkür

Güncelleme

: Ben video # 3 24:15 iTunes'da Stanford Üniversitesi tarafından ve dakika sunulan kurs Developing iOS 8 Apps with Swift gelen MVC uygulanması izledi Bugün (01/07/2016) Paul Hegarty erişim kontrolü hakkında konuşuyor, kesinlikle tavsiye ederim.

+1

Özel kullanıyoruz. Sadece size bundan bahsetmiyoruz, çünkü… iyi… özel. –

+1

Mümkün olan en dar erişim denetimini kullanma isteğiniz hala geçerlidir, IMHO. Öğreticilerde gördüğünüz snippet'lerin bu konuya kısa bir verim verdiği konusunda şaşırmadım, çünkü bu daha büyük pratik uygulamalarda ortaya çıkma eğilimi gösteriyor. Sürekli olarak 'özel' kullanıldığını gördüğüm tek zaman, depolanmış mülkle doğrudan etkileşimin açık bir şekilde sorunlu olduğu bazı depolanmış özellik tarafından desteklenen bazı hesaplanmış özellikler olduğunda: Bunu genellikle 'özel' olarak işaretlenmiş olarak görürsünüz. Ancak, kısacası çoğumuz kendi kodumuzda 'private' kullanıyoruz. – Rob

+0

@Rob Sadece sınıf içinde (sınıf kapsamı) kullanılacak ve geri kalanını 'dahili' olarak bırakacak herhangi bir özelliği 'özel' yapmak iyi bir uygulama olacağını söyleyebilir miydiniz? Bu şekilde kod en azından daha okunabilir olacaktır. –

cevap

8

Swift'de erişim kontrolü, beni de şaşırtan şeylerden biriydi, bu yüzden yalnız değilsiniz. Swift, önceden bildiğim C++, Java, C# tarafından kullanılandan oldukça farklı bir paradigma kullanır.

Swift'in erişim denetimi, sınıflara değil, kaynak dosya ve modüllere dayalıdır. Buradaki fikir şudur: eğer bir sınıf yazıyorsanız, o zaman tüm üyelerine aynı kaynak dosyasında veya modülde varsayılan olarak başka bir sınıftan erişebilmeniz gerekir. Başka biri sınıfınızı genişletirse, kodları farklı bir modülde ve kaynak dosyada olacak, böylece onlara erişim vermediğiniz sürece temel sınıf üyelerinize erişemezler.

Eğer bunun hakkında düşünürseniz, Swift kontrol paradigması C++/Java kadar mantıklıdır, sadece farklıdır.

Bu ve dil arasındaki diğer farklar için lütfen bkz http://www.swiftprogrammer.info/swift_vs_cpp.html.

+0

Anladığım kadarıyla, teoride kodunuz diğer Xcode projelerinde kullanılacaksa, sadece erişim kontrolünü kullanmanız yeterlidir, doğru mu? Sanırım tüm özellik değerlerine erişebildiğiniz için çok fazla ayarlayıcı ve alıcıya sahip olacağımızı tahmin ediyorum (Biliyorum, Swift'deki bilgisayar özelliklerine ait alıcılar ve ayarlayıcılar). –

+0

Bu konu hakkında daha fazla bilgi için orijinal gönderimdeki güncellemeye bakın. –