我有一个带有3个选项的分段控件。我真的不知道如何从selected.segmentedIndex
创建变量,所以我从另一个地方复制一个方法。
typedef NS_ENUM(int, tipoServidor) {
SERVIDOR_ARG = 1,
SERVIDOR_EU = 2,
SERVIDOR_US = 3};
@property (nonatomic) tipoServidor servidorType;
<Another file>
if (self.persistentSettings.servidorType == SERVIDOR_ARG){
self.servidorControl.selectedSegmentIndex= 0;
} else if (self.persistentSettings.servidorType == SERVIDOR_EU) {
self.servidorControl.selectedSegmentIndex= 1;
} else if (self.persistentSettings.servidorType == SERVIDOR_US) {
self.servidorControl.selectedSegmentIndex = 2;}
<Another file>
- (NSString *)servidorType {
AdSettings *settings = [[AdSettings alloc] init];
NSString *server = [settings servidorType];
问题是最后一行抛出了这个错误:
Implicit conversion of 'tipoServidor' (aka 'enum tipoServidor') to 'NSString *' is disallowed with ARC
如何使这项工作正确?
非常感谢
答案 0 :(得分:2)
问题是最后一行会引发此错误:ARC不允许将
tipoServidor
(又名enum tipoServidor
)隐式转换为NSString *
是否为ARC,enum
不是NSString
,因此您无法执行此操作。为了处理它,要么定义表示enum
值的字符串数组,要么编写一个执行映射的小函数,例如:
NSString *DescriptionOfServidor(tipoServidor e) {
switch (e) {
case SERVIDOR_ARG: return @"SERVIDOR_ARG";
case SERVIDOR_EU: return @"SERVIDOR_EU";
case SERVIDOR_US: return @"SERVIDOR_US";
}
return nil;
}
现在你需要的就是这个电话:
NSString *server = DescriptionOfServidor([settings servidorType]);