如何解决在objective-c
我想将一个枚举的objective-c值存储在一个Swift类中,稍后我想在objective-c中再次读取它。我不断得到一个内存地址而不是值。如何从 Swift Int 中获取值并将其再次转换为枚举?
@objcmembers
public class MyClass: SuperClass {
public var myNumber: Int
}
@objc public enum SomeEnum: Int {
case apple
case pear
}
- (void)aDemoFunction:(MyClass *)varname {
int test = varname.myNumber; //test gets a long number,e.g. -2028686406
// this is what I want to achieve.
// it never works,because already the int is wrong
SomeEnum myValue = (SomeEnum)varname.myNumber; // expected my enum type,but debugger says it's SomeEnum | 0xa80aa52d8714b3b8
}
在objective-c 代码中,我访问变量myNumber。
如果我打印 po varname.myNumber
结果是预期的。例如,为梨打印“1”。
我尝试了很多,例如
int test = myVariable.myNumber; // (int) test = -2028686406
int test2 = (int)myVariable.myNumber; // (int) test2 = -2028686406
NSNumber *test3 = [NSNumber numberWithInteger:myVariable.myNumber]; //NSNumber *) test3 = 0x0000000121480610
编辑: 正如 Rob Napier 指出的那样,它必须以某种方式与其他事物有关,因为我创建了一个孤立的示例,并且在那里它可以正常工作。这是:
MyClass.swift
import Foundation
@objc public enum SomeEnum: Int {
case apple
case pear
}
@objcmembers
public class MyClass: NSObject {
public var myNumber: Int = 0
}
ViewController.m(~空头文件)
#import "ViewController.h"
#import "demo-Swift.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
MyClass *myClassInstanc = [MyClass new];
NSLog(@"myClassInstanc.myNumber: %ld",(long)myClassInstanc.myNumber); // 0
myClassInstanc.myNumber = SomeEnumPear;
NSLog(@"myClassInstanc.myNumber: %ld",(long)myClassInstanc.myNumber); // 1
SomeEnum myEnum = (SomeEnum)myClassInstanc.myNumber; // 2
NSLog(@"myClassInstanc.myNumber as enum: %ld",myEnum);
if(myEnum == SomeEnumPear) {
NSLog(@"success"); // success is printed
}
}
@end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。