gpt4 book ai didi

ios - String.Encoding 未在 swift 3 中转换为 NSStringEncoding 到 objective-c 转换

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:29 28 4
gpt4 key购买 nike

正在将我现有的 swift 源代码库转换为 swift 3,并且在 swift 类中有一个方法,该方法早些时候返回 NSStringEncoding。在 swift 3 中,编译器要求我将 NSStringEncoding 转换为 String.Encoding。但是这个方法现在没有反射(reflect)在 objective-c 生成的接口(interface)中,现在我无法在我的 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;
}

编译器为上面的行抛出这个错误,

Property 'textEncoding' not found on object of type 'MyClass *'

我无法在 swift 文件中声明/使用 NSStringEncoding 并且在 Objective C 中无法使用 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 }

关于ios - String.Encoding 未在 swift 3 中转换为 NSStringEncoding 到 objective-c 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com