Удобный init не доступен для подкласса, если объявлен в расширении Swift5.1 Xcode11.3 - PullRequest
0 голосов
/ 23 января 2020
    import UIKit

    public class MyButton: UIButton {}

    public extension UIButton {
        var someProperty: Int { 1 } // visible in xcframework

        convenience init(label: String) { // NOT visible in xcframework
            self.init()
        }
    }

Я делаю xcframework. Этот код внутри него. Я связываю это xcframework с приложением и использую его, но для класса MyButton удобство инициализации отсутствует. XCode 11,3

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Флаг publi c необходим для удобства init. Это позволит init быть видимым в xcframework.

Попробуйте это

import UIKit

public class MyButton: UIButton {}

public extension UIButton {
    var someProperty: Int { 1 } // visible in xcframework

    public convenience init(label: String) { // NOT visible in xcframework
        self.init()
    }
}

Однако вы обновляете UIButton вместо вашего объявленного класса MyButton. Убедитесь, что это именно то, что вы хотите сделать.

0 голосов
/ 23 января 2020

Создать extension из MyButton, а не UIButton,

public extension MyButton {
    var someProperty: Int {
        return 1
    }

    convenience init(label: String) { 
        self.init()
    }
}

В приложении, получить к нему доступ, используя

MyButton(label: "Button_Label")

Редактировать:

Даже если вы подкласс MyButton, init(label:) будут доступны в подклассе, пока вы не определите его собственные инициализаторы.

public class MySuperButton: MyButton {

}

Вы можете получить доступ к init(label:) в основном проекте, как,

MySuperButton(label: "Super Button")
...