繁体   English   中英

迅速将String.Encoding转换为NSStringEncoding 3到目标C的转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM