Sobes.tech
Junior

Ar atvira klasė yra vieša ar privači?

sobes.tech AI

Atsakymas iš AI

open klasė yra vieša. Skirtumas nuo paprastos public yra tas, kad open klasės ir jos nariai, paskelbti kaip open, gali būti paveldėti ir perrašyti už modulio ribų, kuriame jie apibrėžti. public klasės yra prieinamos naudoti už modulio ribų, tačiau negali būti paveldėtos ar perrašytos, jei nėra pažymėtos kaip open.

Swift prieigos lygiai:

  • open: aukščiausias prieigos lygis. Prieinamas iš bet kurio modulio ir gali būti paveldėtas bei perrašytas.
  • public: prieinamas iš bet kurio modulio, bet už modulio ribų negali būti paveldėtas ar perrašytas.
  • internal: numatytasis prieigos lygis. Prieinamas tik modulio ribose.
  • fileprivate: prieinamas tik faile, kuriame apibrėžtas.
  • private: žemiausias prieigos lygis. Prieinamas tik toje deklaracijoje, kurioje yra apibrėžtas.

Pavyzdys:

// `open` klasės deklaravimas ModulesA.swift faile
open class OpenClass {
    open func openMethod() {
        print("Tai yra atviras metodas.")
    }
}

// Naudojimas ModulesB.swift faile (kitoje modulyje)
import ModulesA

class MyClass: OpenClass { // Paveldėjimas leidžiamas
    override func openMethod() { // Perrašymas leidžiamas
        super.openMethod()
        print("Tai yra perrašytas atviras metodas.")
    }
}
// `public` klasės deklaravimas ModulesA.swift faile
public class PublicClass {
    public func publicMethod() {
        print("Tai yra viešas metodas.")
    }
}

// Naudojimas ModulesB.swift faile (kitoje modulyje)
import ModulesA

let instance = PublicClass()
instance.publicMethod() // Naudojimas leidžiamas
// class MyOtherClass: PublicClass { // KLAIDA: viešas klasė negali būti paveldėta už modulio ribų
//     override func publicMethod() { // KLAIDA: viešas metodas negali būti perrašytas už modulio ribų
//         super.publicMethod()
//     }
// }