首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >String.Encoding没有被翻译成NSStringEncoding 3到目标C转换

String.Encoding没有被翻译成NSStringEncoding 3到目标C转换
EN

Stack Overflow用户
提问于 2016-11-08 11:57:21
回答 1查看 680关注 0票数 1

我正在将我现有的快速源代码库转换成NSStringEncoding 3,并在一个较早返回的was类中有一个方法。在Wavid3中,编译器要求我将NSStringEncoding转换为String.Encoding。但是这个方法现在没有反映在objective生成的接口中,而且现在无法在我的objective类中调用这个方法。

这是一个示例代码片段:

代码语言:javascript
复制
@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级,

代码语言:javascript
复制
-(void)demoFunc:(MyClass * _Nonnull)response{
(i)  NSStringEncoding responseEncoding = response.textEncoding;
}

编译器正在为上面的行抛出此错误,

在类型为“textEncoding*”的对象上找不到属性“MyClass”

如何解决这个问题,因为我不能在快速文件中声明/使用NSStringEncoding,而在目标C中,我不能使用String.Encoding?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 12:34:55

基金会定义

代码语言:javascript
复制
typedef NSUInteger NSStringEncoding;
NS_ENUM(NSStringEncoding) {
    NSASCIIStringEncoding = 1,      /* 0..127 only */
    // ...
};

映射到Swift作为

代码语言:javascript
复制
extension String {
    public struct Encoding : RawRepresentable {
        public var rawValue: UInt
        // ...
    }
}

因此,您可以做的是将原始值传递回目标C:

代码语言:javascript
复制
open var textEncoding: UInt { return self.getEncoding().rawValue }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40486355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档