gpt4 book ai didi

objective-c - 从 objc 委托(delegate)给 swift 以解除模态视图

转载 作者:搜寻专家 更新时间:2023-11-01 05:41:02 26 4
gpt4 key购买 nike

我有一个 objc uiviewcontroller,它在模式中执行到 swift uiviewcontroller 的 segue。我在 objc 文件中创建了委托(delegate),但我无法从 swift 文件中调用 objc 中的方法。所有文件接缝都没有问题,但是当调用 delegate.function 时,我在 swift 文件中出现了错误的 exec。

对象

 #import "Cliente-Swift.h"
@interface ViewController () <gameDelegate>
@end

(...)

else if ([[segue identifier] isEqualToString:@"segueToGame"]) {
//jump to main vgame controller
GameViewController *gameVC = [segue destinationViewController];
gameVC.mydelegate = self;
}

swift GameViewController

@objc protocol gameDelegate {
func dismissGame()
}

class GameViewController: UIViewController {

var mydelegate: gameDelegate! = nil

override func viewDidLoad() {
super.viewDidLoad()
let scene = MainMenuScene(size:CGSize(width: 1536, height: 2048))
//let scene = GameScene(size:CGSize(width: 1536, height: 2048))

let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.showsPhysics = true;
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}


override func prefersStatusBarHidden() -> Bool {
return true
}


func sairDoJogo() {

print("mydelegate = \(mydelegate!)")


mydelegate!.dismissGame()

错误的 exec 是调用 objc 函数 dismissGame 的地方

最佳答案

我怀疑 mydelegate 并没有真正设置。您应该检查 mydelegate 是否真的设置在 prepareForSegue:... 中,也许通过添加日志输出:(您的 segue id 是否正确?)

else if ([[segue identifier] isEqualToString:@"segueToGame"]) {
//jump to main vgame controller
NSLog(@"Setting game delegate");
GameViewController *gameVC = [segue destinationViewController];
gameVC.mydelegate = self;
}

GameViewController 中,您可以在调用 dismissGame() 之前检查 mydelegate 是否为 nil ,或者只使用 ?:(当您将 mydelegate 声明为 gameDelegate! 时,您调用中的 ! 不是必要的,因为它“隐含地存在” - 但您仍然可以使用 mydelegate?.dismissGame())

    if mydelegate != nil {
mydelegate.dismissGame()
}

    mydelegate?.dismissGame()

(我用示例项目进行了快速测试,未初始化 mydelegate 会导致您描述的错误。)

关于objective-c - 从 objc 委托(delegate)给 swift 以解除模态视图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30395677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com