it-swarm-tr.com

Swift'deki 'open' anahtar kelimesi nedir?

Standart kütüphaneden ObjectiveC.Swift / dosyası, 228 satırı boyunca aşağıdaki birkaç kod satırını içerir:

extension NSObject : Equatable, Hashable {
  /// ...
  open var hashValue: Int {
    return hash
  }
}

open var bu bağlamda ne anlama gelir veya genel olarak open anahtar sözcüğü nedir?

282
Clashsoft

open, Swift 3’teki yeni bir erişim seviyesidir ve

7 Ağustos 2016'daki Swift 3 anlık görüntü ve Xcode 8 beta 6 ile kullanılabilir.

Kısacası:

  • Bir open sınıfı erişilebilir ve alt sınıfı dışında tanımlayıcı modül. Bir open sınıfı üyesi erişilebilir ve dışında geçersiz kılınabilir tanımlayıcı modül.
  • Bir public sınıfı erişilebilir ancak dışında sınıflanamaz dışında tanımlayıcı modül. Bir public sınıfı üye erişilebilir fakat dışında geçersiz kılınamaz tanımlayan modülün.

Böylece, open, önceki Swift sürümlerinde kullanılan public'ın serbest kalması ve public'ın erişiminin kısıtlanmasıydı. Veya, Chris Lattner'ın içine koyduğu gibi SE-0177: Herkese açık erişim ile halkın aşırı sayılabilirliği arasında ayrım yapmanıza izin verin :

“Açık” şimdi basitçe “halktan daha halka açık” ve çok basit ve temiz bir model sağladı.

Örneğinizde, open var hashValue erişilebilir olan ve NSObject alt sınıflarında geçersiz kılınabilen bir özelliktir.

Daha fazla örnek ve ayrıntı için, SE-0117 'ye bakınız.

522
Martin R

Olarak açık oku 

diğer modüllerde kalıtım için açık

Diğer modüllerde kalıtım için tekrar açarım. Böylece açık bir sınıf, tanımlayıcı modülü içeren diğer modüllerde alt sınıflamaya açıktır. Açık değişkenler ve fonksiyonlar diğer modüllerde geçersiz kılmak için açıktır. En az kısıtlayıcı erişim seviyesi. Halkın erişiminin kamuya açık bir şeyin diğer modüllerde kalıtım için kapalı olduğunu kabul etmesi kadar iyidir. 

Apple Dokümanlarından :

Açık erişim sadece sınıflar ve sınıf üyeleri için geçerlidir ve aşağıdaki gibi halka açık erişimden farklıdır:

  1. Kamuya erişimi olan veya daha kısıtlayıcı bir erişim seviyesine sahip sınıflar olabilir. sadece tanımlandıkları modül içerisinde alt sınıflara alınabilir. 

  2. Kamuya erişimi olan sınıf üyeleri veya daha kısıtlayıcı bir erişim seviyesi olabilir. sadece aldıkları modül içindeki alt sınıflar tarafından geçersiz kılınmalıdır. tanımladı.

  3. Açık sınıflar, tanımlandıkları modülün içinde ve buradaki modülü alan herhangi bir modülün içinde alt sınıflanabilir. tanımlılar. 

  4. Açık sınıf üyeleri alt sınıflar tarafından geçersiz kılınabilir. tanımlandıkları modül içinde ve bu modüllerden herhangi birinde. tanımlandıkları modülü alır.
7
Mohammad Sadiq

Açık, bir erişim seviyesidir, Swift'deki sınıf mirasına sınırlamalar getirmek için getirildi. 

Bu, open erişim seviyesinin yalnızca sınıflara ve sınıf üyelerine uygulanabileceği anlamına gelir.

Sınıflarda

Açık bir sınıf, tanımlandığı modülde ve sınıfın tanımlandığı modülü içe aktaran modüllerde alt sınıflanabilir.

Sınıf içi üyeler

Aynısı sınıf üyeleri için de geçerlidir. Açık bir yöntem, tanımlandığı modülde ve metodun tanımlandığı modülü ithal eden modüllerde alt sınıflar tarafından geçersiz kılınabilir.

BU GÜNCELLEME İHTİYACI

Bazı kütüphane ve çerçeve sınıfları alt sınıflandırılmak üzere tasarlanmamıştır ve bunu yapmak beklenmeyen davranışlara yol açabilir. Yerel Apple kütüphanesi aynı yöntem ve sınıfların geçersiz kılınmasına izin vermez. 

Bu yüzden bu ilaveden sonra buna göre kamu ve özel erişim seviyelerini uygulayacaklar.

Daha fazla ayrıntı için Erişim Denetimi Üzerine Apple Belgeleri bölümüne bakın

4
Saranjith

açık yalnızca başka bir modül içindir, örneğin: kakao kabukları veya birim testi 

0
William

çoklu modüller ile uğraşırken oyuna gelin.

açık sınıfa tanımlayıcı modülün dışında erişilebilir ve alt sınıf verilebilir. Açık sınıf bir üyeye tanımlayıcı modülün dışında erişilebilir ve geçersiz kılınabilir.

0

Alt sınıf dışında, projenizdeki herhangi bir yerden bir open class func dosyasına da erişilebilir. Util sınıfınızda böyle bir açık sınıf işlevi tanımladığınızı varsayalım.

open class Utils: NSObject {
    open class func printHello() {
        print("Hello from utils")
    }
}

Ardından, görünüm denetleyicilerinizin herhangi bir yerinde, bu yöntemi arayarak erişebilirsiniz

Utils.printHello()
0
Fangming