首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换或比较"Unmanaged<NSString>和NSString“

转换或比较"Unmanaged<NSString>和NSString“
EN

Stack Overflow用户
提问于 2016-05-26 13:36:58
回答 2查看 730关注 0票数 2

我在目标C中有一个框架,其结构如下:

VehicleClass.h

代码语言:javascript
复制
struct VehicleStruct
{
    __unsafe_unretained NSString *const CAR;
    __unsafe_unretained NSString *const MOTORCYCLE;
    __unsafe_unretained NSString *const TRUCK;
};

VehicleClass.m

代码语言:javascript
复制
#import "VehicleClass.h"

const struct VehicleStruct Vehicle = {
    .CAR = @"CAR",
    .MOTORCYCLE = @"MOTORCYCLE",
    .TRUCK = @"TRUCK"
};

在我的Contansts.h

代码语言:javascript
复制
extern const struct VehicleStruct Vehicle;

好吧,现在我想用在我的产品中获得汽车价值

代码语言:javascript
复制
let carValueSwift = String(Vehicle.CAR)

控制台

“非托管NSString(_value: CAR)”

我怎么才能解决这个问题?我需要得到类似于NSString的值,因为如果我想在我的框架中进行比较:

["CAR" isEqual: carValueSwift]不工作。

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-26 13:52:40

使用takeUnretainedValue()Unmanaged<NSString>被转换为NSString (无需所有权),这可以简单地转换为Swift String

代码语言:javascript
复制
let carValueSwift = Vehicle.CAR.takeUnretainedValue() as String
print(carValueSwift)
票数 6
EN

Stack Overflow用户

发布于 2016-05-26 13:49:55

好吧,我找到了解决方案:

代码语言:javascript
复制
let car: Unmanaged<NSString> = Vehicle.CAR

let carString = convertCfTypeToString(car)

函数:

代码语言:javascript
复制
func convertCfTypeToString(cfValue: Unmanaged<NSString>!) -> String?
{
   let value = Unmanaged.fromOpaque(
       cfValue.toOpaque()).takeUnretainedValue() as CFStringRef
   if CFGetTypeID(value) == CFStringGetTypeID(){
       return value as String
   } else {
       return nil
   }
}

如果有人知道其他避免使用convertCfTypeToString:方法的方法,请告诉我.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37462490

复制
相关文章

相似问题

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