从Swift类到Objective-C类的取值

从Swift类到Objective-C类的取值,objective-c,xcode,swift,Objective C,Xcode,Swift,我将在Objective-C应用程序中使用Swift类。我成功地将swift类集成到我的应用程序中,我也可以访问该类,但swift类没有返回值 我正在使用这个图书馆 从库中选择图像时出现问题,它应该返回图像,但没有返回 下面是一个代码: @IBAction func doneButtonPressed(sender: UIButton) { let view = albumView.imageCropView UIGraphicsBeginImageContextWi

我将在Objective-C应用程序中使用Swift类。我成功地将swift类集成到我的应用程序中,我也可以访问该类,但swift类没有返回值

我正在使用这个图书馆

从库中选择图像时出现问题,它应该返回图像,但没有返回

下面是一个代码:

   @IBAction func doneButtonPressed(sender: UIButton) {

    let view = albumView.imageCropView

    UIGraphicsBeginImageContextWithOptions(view.frame.size, true, 0)
    let context = UIGraphicsGetCurrentContext()
    CGContextTranslateCTM(context, -albumView.imageCropView.contentOffset.x, -albumView.imageCropView.contentOffset.y)
    view.layer.renderInContext(context!)
    let image : UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    print(image)

    delegate?.fusumaImageSelected(image)
    self.dismissViewControllerAnimated(true, completion: {
    self.delegate?.fusumaDismissedWithImage?(image)
    })
}

相同的代码在Swift应用程序中运行良好。

好的,那么让我们首先解释为什么它不与Objective-C一起工作,并且它只与Swift一起工作,问题是框架的构建仅与Swift兼容,目前为止还不能用于Objective-C,例如,这意味着委托不会出现在Objective-C框架的标题中

您的应用程序有一个变通方法,让我们从将库添加为pod开始,使用Xcode 9.4.1在构建设置中将Swift语言设置为4.1(对于框架):

use_frameworks!
pod 'Fusuma', :git => 'https://github.com/ytakzk/Fusuma.git', :branch => 'master'
现在创建一个名为
fusumaExtension.Swift
的Swift文件,并在其中添加以下代码,请注意,如果您是第一次添加Swift文件,它将要求您在Xcode中创建一个标头,然后说“是”,ViewController就是您的Objective-C类:

import UIKit
import Fusuma

extension ViewController:FusumaDelegate {

    public func fusumaImageSelected(_ image: UIImage, source: FusumaMode) {
        // pass the selected image to your view controller method
        self.fusumaImageSelected(image)

    }

    public func fusumaMultipleImageSelected(_ images: [UIImage], source: FusumaMode) {

    }

    public func fusumaVideoCompleted(withFileURL fileURL: URL) {

    }

    public func fusumaCameraRollUnauthorized() {

    }

    func setDelegateToSelf(FusumaVC:FusumaViewController){

        FusumaVC.delegate = self

    }

}
现在,您可能会发现编译器错误,即找不到作为Objective-C类的ViewController,您需要将其导入
ProjectName Bridgeting Header.h
文件,如下所示:

#import "ViewController.h"
现在,我们可以回到Objective-C类“ViewController.h”并导入以下行:

#import <Fusuma/Fusuma-Swift.h>
#import <Fusuma/Fusuma-umbrella.h>
现在回到您的
ViewController.m
并导入以下行,这使我们先前创建的扩展对objective-c可用,以便能够为fusuma设置委托:

#import <ProjectName-Swift.h> 
然后实现我们在下面的header类中定义的函数,选择图像后将调用此方法:

-(void)fusumaImageSelected:(UIImage *)image{

    // do what ever you want with selected image.

}
这应该是可行的,它已经被测试过了


好的,那么让我们首先解释为什么它不使用Objective-C,并且它只使用Swift,问题是框架的构建仅与Swift兼容,而不适合Objective-C使用,这意味着代理不会出现在Objective-C框架的标题中

您的应用程序有一个变通方法,让我们从将库添加为pod开始,使用Xcode 9.4.1在构建设置中将Swift语言设置为4.1(对于框架):

use_frameworks!
pod 'Fusuma', :git => 'https://github.com/ytakzk/Fusuma.git', :branch => 'master'
现在创建一个名为
fusumaExtension.Swift
的Swift文件,并在其中添加以下代码,请注意,如果您是第一次添加Swift文件,它将要求您在Xcode中创建一个标头,然后说“是”,ViewController就是您的Objective-C类:

import UIKit
import Fusuma

extension ViewController:FusumaDelegate {

    public func fusumaImageSelected(_ image: UIImage, source: FusumaMode) {
        // pass the selected image to your view controller method
        self.fusumaImageSelected(image)

    }

    public func fusumaMultipleImageSelected(_ images: [UIImage], source: FusumaMode) {

    }

    public func fusumaVideoCompleted(withFileURL fileURL: URL) {

    }

    public func fusumaCameraRollUnauthorized() {

    }

    func setDelegateToSelf(FusumaVC:FusumaViewController){

        FusumaVC.delegate = self

    }

}
现在,您可能会发现编译器错误,即找不到作为Objective-C类的ViewController,您需要将其导入
ProjectName Bridgeting Header.h
文件,如下所示:

#import "ViewController.h"
现在,我们可以回到Objective-C类“ViewController.h”并导入以下行:

#import <Fusuma/Fusuma-Swift.h>
#import <Fusuma/Fusuma-umbrella.h>
现在回到您的
ViewController.m
并导入以下行,这使我们先前创建的扩展对objective-c可用,以便能够为fusuma设置委托:

#import <ProjectName-Swift.h> 
然后实现我们在下面的header类中定义的函数,选择图像后将调用此方法:

-(void)fusumaImageSelected:(UIImage *)image{

    // do what ever you want with selected image.

}
这应该是可行的,它已经被测试过了


您是如何实现委托方法的?swift类中提供了所有委托方法,我只需在我的objective c类中导入swift类,并使用它,图像将通过委托返回。是你定的吗?您是否实现了Fosumadelegate协议的委托方法
fusumaDismissedWithImage:
fusumaImageSelected:
?是的,我已经在我的目标c类中实现了-(void)fusumaImageSelected:(UIImage*\u Nonnull)image{NSLog(@“image%@”,image);}但是它没有被调用你是如何实现委托方法的?所有委托方法都在swift类中可用,我只是在我的objective c类中导入swift类,并使用它,图像通过委托返回。是你定的吗?您是否实现了Fosumadelegate协议的委托方法
fusumaDismissedWithImage:
fusumaImageSelected:
?是的,我已经在我的objective c类中实现了-(void)fusumaImageSelected:(UIImage*\u Nonnull)image{NSLog(@“image%@”,image);},但它没有被调用