我在目标C中有一个框架,其结构如下:
VehicleClass.h
struct VehicleStruct
{
__unsafe_unretained NSString *const CAR;
__unsafe_unretained NSString *const MOTORCYCLE;
__unsafe_unretained NSString *const TRUCK;
};VehicleClass.m
#import "VehicleClass.h"
const struct VehicleStruct Vehicle = {
.CAR = @"CAR",
.MOTORCYCLE = @"MOTORCYCLE",
.TRUCK = @"TRUCK"
};在我的Contansts.h中
extern const struct VehicleStruct Vehicle;好吧,现在我想用在我的产品中获得汽车价值
let carValueSwift = String(Vehicle.CAR)在控制台中
“非托管NSString(_value: CAR)”
我怎么才能解决这个问题?我需要得到类似于NSString的值,因为如果我想在我的框架中进行比较:
["CAR" isEqual: carValueSwift]不工作。
非常感谢
发布于 2016-05-26 13:52:40
使用takeUnretainedValue(),Unmanaged<NSString>被转换为NSString (无需所有权),这可以简单地转换为Swift String
let carValueSwift = Vehicle.CAR.takeUnretainedValue() as String
print(carValueSwift)发布于 2016-05-26 13:49:55
好吧,我找到了解决方案:
let car: Unmanaged<NSString> = Vehicle.CAR
let carString = convertCfTypeToString(car)函数:
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:方法的方法,请告诉我.
https://stackoverflow.com/questions/37462490
复制相似问题