#ios #swift
#iOS #swift
Вопрос:
Если я установлю для аргумента значение nil, появится ошибка. Код, подобный этому:
func addChild(childToAdd: UIViewController, childToRemove: UIViewController) {
if (childToRemove != nil) {
childToRemove.view.removeFromSuperview()
}
var frame = childToAdd.view.frame as CGRect
frame.size.width = view.frame.size.width;
frame.size.height = view.frame.size.height;
childToAdd.view.frame = frame
view.addSubview(childToAdd.view)
}
override func viewDidLoad() {
super.viewDidLoad()
addChild(firstViewController, childToRemove: nil) //could not find an overload for conversion that accepts supplied argument
}
Как вы можете видеть, я не должен вводить там nil, но что я должен вставить. Он работает в Objective-c.
Ответ №1:
Ваш childToRemove
параметр определен как a UIViewController
, который не является необязательным , поэтому не может быть равен нулю
попробуйте :
func addChild(childToAdd: UIViewController, childToRemove: UIViewController?) {
чтобы разрешить нулевое значение для вашего второго параметра, и не забывайте, что вам нужно развернуть необязательный параметр перед его использованием (использование if let — отличный способ сделать это) :
if let childController = childToRemove {
childController.view.removeFromSuperview()
}
Ответ №2:
вкратце, ваш второй параметр должен быть необязательным, если вы хотите отправить nil
:
func addChild(childToAdd: UIViewController, childToRemove: UIViewController?) {
if childToRemove != nil {
childToRemove!.view.removeFromSuperview()
}
// the rest is the same...
}