![](/img/trans.png)
[英]Swift 3.1: String.Encoding(rawValue: ) run incorrectly in an iOS application
[英]String.Encoding is not getting translated to NSStringEncoding in swift 3 to objective C conversion
我正在将我现有的swift源代码库转换为swift 3,并在swift类中有一个方法,该方法先前已返回NSStringEncoding。 在Swift 3中,编译器要求我将NSStringEncoding转换为String.Encoding。 但是,此方法现在尚未反映在Objective-C的生成接口中,并且现在无法在我的Objective-C类中调用此方法。
这是一个示例代码片段:
@objc
open class MyClass: NSObject{
open var textEncoding: String.Encoding { get { return self.getEncoding() } }
fileprivate func getEncoding() -> String.Encoding{
// some conversion code
return encoding
}
}
在Objective-C课程中,
-(void)demoFunc:(MyClass * _Nonnull)response{
(i) NSStringEncoding responseEncoding = response.textEncoding;
}
编译器在上一行抛出此错误,
在“ MyClass *”类型的对象上找不到属性“ textEncoding”
如何解决此问题,因为我无法在swift文件中声明/使用NSStringEncoding,而在Objective CI中不能使用String.Encoding?
基金会定义
typedef NSUInteger NSStringEncoding;
NS_ENUM(NSStringEncoding) {
NSASCIIStringEncoding = 1, /* 0..127 only */
// ...
};
映射到Swift作为
extension String {
public struct Encoding : RawRepresentable {
public var rawValue: UInt
// ...
}
}
因此,您可以做的是将原始值传递回Objective-C:
open var textEncoding: UInt { return self.getEncoding().rawValue }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.