Ios 如何向调用当前objective-c视图的Swift视图返回字符串?

Ios 如何向调用当前objective-c视图的Swift视图返回字符串?,ios,objective-c,swift,Ios,Objective C,Swift,我从使用swift的View1开始,调用objective-c中的View2,在View2中收集输入,我想向View1返回一个字符串 最简单的方法是什么?将Swift文件设置为引用Objective-C代码: #将要在Swift(ViewController2.h)中使用的Objective-C头文件导入 自动生成的ProjectName桥接头.h。也输入任何 导入的文件所依赖的框架 将Objective-C文件设置为参考Swift代码: 在生成设置中: 将嵌入式内容控制系统Swift cod

我从使用swift的View1开始,调用objective-c中的View2,在View2中收集输入,我想向View1返回一个字符串


最简单的方法是什么?

将Swift文件设置为引用Objective-C代码:

  • #将要在Swift(
    ViewController2.h
    )中使用的Objective-C头文件导入 自动生成的
    ProjectName桥接头.h
    。也输入任何 导入的文件所依赖的框架
  • 将Objective-C文件设置为参考Swift代码:

  • 在生成设置中:
    • 嵌入式内容控制系统Swift code
      设置为
      Yes
    • Install Objective-C Compatibility Header
      设置为
      Yes
    • Objective-C生成的接口头名称中获取文件名。这看起来像
      ProjectName Swift.h
  • 在Swift类中,添加
    @objc
    ,如下所示:
    • @objc class ViewController1:UIViewController{…}
  • ViewController2.m
    .h
    中,
    #import“ProjectName Swift.h
    。这可能会自动完成,也可能不会自动完成,因此请键入它
  • 现在,您已设置为引用不同语言的视图控制器。让我们假设
    ViewController1
    ViewController2
    的父视图控制器。您现在可以按如下方式传递字符串:

    NSString *input = // get the input
    ViewConrtoller1 *viewContr1 = (ViewConrtoller1 *)self.parentViewController;
    viewContr1.stringInput = input;
    
    或者从
    ViewController1
    转到
    ViewController2

    // in prepare for segue
    let someString = // whatever you want to pass
    let viewContr2 = segue.destinationViewController as! ViewController2
    viewController2.someString = someString 
    

    将Swift文件设置为参考Objective-C代码:

  • #将要在Swift(
    ViewController2.h
    )中使用的Objective-C头文件导入 自动生成的
    ProjectName桥接头.h
    。还可以导入任何 导入的文件所依赖的框架
  • 将Objective-C文件设置为参考Swift代码:

  • 在生成设置中:
    • 嵌入式内容控制系统Swift code
      设置为
      Yes
    • Install Objective-C Compatibility Header
      设置为
      Yes
    • Objective-C生成的接口头名称
      中获取文件名。这将类似于
      ProjectName Swift.h
  • 在Swift类中,添加
    @objc
    ,如下所示:
    • @objc class ViewController1:UIViewController{…}
  • ViewController2.m
    .h
    中,
    #import“ProjectName Swift.h
    。这可能会自动完成,也可能不会自动完成,所以请键入它
  • 现在,您已设置为以不同语言引用视图控制器。假设
    ViewController1
    ViewController2
    的父视图控制器。现在可以按如下方式传回字符串:

    NSString *input = // get the input
    ViewConrtoller1 *viewContr1 = (ViewConrtoller1 *)self.parentViewController;
    viewContr1.stringInput = input;
    
    或者从
    ViewController1
    转到
    ViewController2

    // in prepare for segue
    let someString = // whatever you want to pass
    let viewContr2 = segue.destinationViewController as! ViewController2
    viewController2.someString = someString 
    

    您需要一个桥接标头,以便objective-c视图可以引用swift视图。然后您可以使用常规方法(通知、对视图的引用等)传递字符串。@keithbhunter xcode为我制作了标题。我在iOS n00b中。你能给我介绍一下更多的细节吗?你需要一个桥接标题,以便objective-c视图可以引用swift视图。然后您可以使用常规方法(通知、对视图的引用等)传递字符串。@keithbhunter xcode为我制作了标题。我在iOS n00b中。请你再给我讲一点细节好吗?看起来不错。但是,如何使用委派来实现这一点?在
    ViewController2
    中声明委派协议,并在
    ViewController2
    上创建符合协议的
    delegate
    属性。然后,当您要通知代理任何更改时,执行正常的
    [self.delegate notifyOfInput:input]
    。在Swift和Objective-C之间跳跃不是什么大问题;语法改变了,但是概念是相似的。看起来不错。但是,如何使用委派来实现这一点?在
    ViewController2
    中声明委派协议,并在
    ViewController2
    上创建符合协议的
    delegate
    属性。然后,当您要通知代理任何更改时,执行正常的
    [self.delegate notifyOfInput:input]
    。在Swift和Objective-C之间跳跃不是什么大问题;语法发生了变化,但概念是相似的。