๐ŸŽ iOS & Swift

[iOS] overriding non-open instance method outside of its defining module

taeeekki 2022. 8. 22. 01:22

๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋‚ฌ๋‹ค.

overriding non-open instance method outside of its defining module

 


 

import UIKit

open class BaseView: UIView {
    
    public override init(frame: CGRect) {
        super.init(frame: frame)
        
        configureAttributes()
        configureLayout()
    }
    
    @available(*, unavailable)
    public required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
    
    public func configureAttributes() {}
    public func configureLayout() {}
}

BaseView์•ˆ์— configureAttributes, configureLayout์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  BaseView๋ฅผ ์ƒ์† ๋ฐ›๋Š” ViewController์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์“ฐ๊ธฐ ์œ„ํ•จ์ด์—ˆ๋‹ค. ์•ž์— public์œผ๋กœ ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ƒ์†์„ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— open์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

import UIKit

open class BaseView: UIView {
    
    public override init(frame: CGRect) {
        super.init(frame: frame)
        
        configureAttributes()
        configureLayout()
    }
    
    @available(*, unavailable)
    public required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
    
    open func configureAttributes() {}
    open func configureLayout() {}
}