2016-11-08 49 views
1

我正在将我现有的swift源代码库转换为swift 3,并且在Swift类中有一个方法,它早些时候返回NSStringEncoding。在swift 3中,编译器要求我将NSStringEncoding转换为String.Encoding。但是这种方法现在没有在Objective-c生成的接口中反映出来,现在我无法在我的objective-c类中调用此方法。String.Encoding没有被转换为NSStringEncoding在SWIFT 3到目标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文件和Objective C中声明/使用NSStringEncoding我不能使用String.Encoding?

回答

2

基金会定义

typedef NSUInteger NSStringEncoding; 
NS_ENUM(NSStringEncoding) { 
    NSASCIIStringEncoding = 1,  /* 0..127 only */ 
    // ... 
}; 

被映射到斯威夫特

extension String { 
    public struct Encoding : RawRepresentable { 
     public var rawValue: UInt 
     // ... 
    } 
} 

所以你可以做的是通过原始值回的Objective-C:

open var textEncoding: UInt { return self.getEncoding().rawValue }