我正在将我现有的快速源代码库转换成NSStringEncoding 3,并在一个较早返回的was类中有一个方法。在Wavid3中,编译器要求我将NSStringEncoding转换为String.Encoding。但是这个方法现在没有反映在objective生成的接口中,而且现在无法在我的objective类中调用这个方法。
这是一个示例代码片段:
@objc
open class MyClass: NSObject{
open var textEncoding: String.Encoding { get { return self.getEncoding() } }
fileprivate func getEncoding() -> String.Encoding{
// some conversion code
return encoding
}
}在一个目标-c级,
-(void)demoFunc:(MyClass * _Nonnull)response{
(i) NSStringEncoding responseEncoding = response.textEncoding;
}编译器正在为上面的行抛出此错误,
在类型为“textEncoding*”的对象上找不到属性“MyClass”
如何解决这个问题,因为我不能在快速文件中声明/使用NSStringEncoding,而在目标C中,我不能使用String.Encoding?
发布于 2016-11-08 12:34:55
基金会定义
typedef NSUInteger NSStringEncoding;
NS_ENUM(NSStringEncoding) {
NSASCIIStringEncoding = 1, /* 0..127 only */
// ...
};映射到Swift作为
extension String {
public struct Encoding : RawRepresentable {
public var rawValue: UInt
// ...
}
}因此,您可以做的是将原始值传递回目标C:
open var textEncoding: UInt { return self.getEncoding().rawValue }https://stackoverflow.com/questions/40486355
复制相似问题