我获得了UIImage的快速类别,但我无法弄清楚如何使其发挥作用。
这是我尝试使用的快速类别:
import UIKit
extension UIImage {
func imageWithColor(color1: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
color1.setFill()
let context = UIGraphicsGetCurrentContext()! as CGContextRef
CGContextTranslateCTM(context, 0, self.size.height)
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, CGBlendMode.Normal)
let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
CGContextClipToMask(context, rect, self.CGImage)
CGContextFillRect(context, rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
return newImage
}
}
在我的目标C视图控制器代码中我试图导入:
#import "UIImage+Overlay.swift"
xcode给了我很多错误,它看起来像Objective C错误。它似乎并不能理解快速的代码。
错误: 意外的' @'在我宣布第一个属性的程序中:
@property (nonatomic, strong) NSArray *contentImages;
正如Leo Natan所说,我确实尝试导入,但我认为是因为我的应用程序的名称。我确实尝试了所有这种导入,但仍然说无法找到它。
#import <ProductName/ProductModuleName-Swift.h>
#import <Say_Cheese_/Say_Cheese_-Swift.h>
#import <Say Cheese!/Say_Cheese_-Swift.h>
#import <Say Cheese!-Say_Cheese_-Swift.h>
#import <Say Cheese!-Bridging-Header.h>
我的产品名称是#34; Say Cheese!&#34; 我的产品模块名称是Say_Cheese_,但后面是$(PRODUCT_NAME:c99extidentifier)
我害怕更改产品模块名称,是否安全?
答案 0 :(得分:4)
不要导入Swift文件。相反,import the compiler generated "ProductModuleName-Swift.h" file。
将Swift导入Objective-C
当您将Swift代码导入Objective-C时,您依赖于 Xcode生成的头文件将这些文件暴露给Objective-C。这个 自动生成的文件是一个声明的Objective-C头 目标中的Swift接口。它可以被认为是一种 你的Swift代码的标题。这个标题的名称是你的 产品模块名称后跟“-Swift.h”。 (你会了解更多 有关产品模块名称,请参阅命名产品模块。)
默认情况下,生成的标头包含Swift的接口 用public修饰符标记的声明。它还包含那些 如果你的应用目标有一个内部修饰符,则标记为内部修饰符 Objective-C桥接头。用私有标记的声明 修饰符不会出现在生成的标题中。私人声明 除非明确标记,否则不会暴露给Objective-C @IBAction,@ IBMOutlet或@objc。如果您的应用目标已编译 启用测试后,单元测试目标可以访问任何声明 使用内部修饰符,就像它们是与公众一起声明的那样 通过将@testable预先添加到产品模块导入来修改 言。
您无需执行任何特殊操作即可创建生成的标头 file-只需导入它以在Objective-C代码中使用其内容。注意 生成的头中的Swift接口包含引用 到它们中使用的所有Objective-C类型。如果你使用自己的 Swift代码中的Objective-C类型,请确保导入 导入Swift之前这些类型的Objective-C标头 生成标题到您要访问的Objective-C .m文件中 Swift代码来自。
在项目的目标中,找到产品模块名称。通常,它与目标具有相同的名称。这将是编译器生成的头文件的名称。
在Objective C源文件中,导入此标题。
#import <ProductModuleName-Swift.h>
每次构建项目时都会生成此头文件,因此对Swift文件的任何更改都需要编译才能在Objective C中使用。
答案 1 :(得分:-1)
我在这个链接上得到了一些提示: How to import Swift code to Objective-C
但要解决这个问题,我确实使用了&#34;&#34;而是&lt;&gt;在#import
#import "SayCheese-Swift.h"
然后我将产品模块名称定义为&#34; SayCheese&#34;没有特殊的字符和空格。
谢谢Leo。