Вызовите делегата без segues или фактически добавив представление на раскадровку
Я новичок в Swift, и я запутался, как передать значения из контейнера в родительское представление. Я попробовал метод делегата, но я не знаю, как вызвать метод делегата внутри родителя. Кажется, он не работает, приложение просто завершается.
Следующий код показывает, как отображать контейнер. CameraView - это представление контейнера, а DiaryEntryViewController - это родительский контроллер представления.
@IBAction func cameraBtn(_ sender: Any) {
CameraView.isHidden = !CameraView.isHidden
self.view.sendSubview(toBack: diaryEntryText)
}
И при нажатии другой кнопки контейнер должен скрывать и одновременно передавать данные в родительское представление. Я могу скрыть представление с помощью следующего кода:
@IBAction func saveCamBtn(_ sender: Any) {
let parent = self.parent as! DiaryEntryViewController
parent.CameraView.isHidden = true
}
Есть ли способ получить данные для родительского представления. На самом деле я не хочу использовать сегменты, так как данные внутри представления не должны быть потеряны, если я снова открою контейнерное представление.
1 ответ
Here is an example, the Player class delegates the shooting logic to the weapon:
protocol Targetable {
var life: Int { get set }
func takeDamage(damage: Int)
}
protocol Shootable {
func shoot(target: Targetable)
}
class Pistol: Shootable {
func shoot(target: Targetable) {
target.takeDamage(1)
}
}
class Shotgun: Shootable {
func shoot(target: Targetable) {
target.takeDamage(5)
}
}
class Enemy: Targetable {
var life: Int = 10
func takeDamage(damage: Int) {
life -= damage
println("enemy lost \(damage) hit points")
if life <= 0 {
println("enemy is dead now")
}
}
}
class Player {
var weapon: Shootable!
init(weapon: Shootable) {
self.weapon = weapon
}
func shoot(target: Targetable) {
weapon.shoot(target)
}
}
var terminator = Player(weapon: Pistol())
var enemy = Enemy()
terminator.shoot(enemy)
//> enemy lost 1 hit points
terminator.shoot(enemy)
//> enemy lost 1 hit points
terminator.shoot(enemy)
//> enemy lost 1 hit points
terminator.shoot(enemy)
//> enemy lost 1 hit points
terminator.shoot(enemy)
//> enemy lost 1 hit points
// changing weapon because the pistol is inefficient
terminator.weapon = Shotgun()
terminator.shoot(enemy)
//> enemy lost 5 hit points
//> enemy is dead now
Кроме того, вы можете обратиться по этой ссылке: https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef