微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在objective-c

如何解决在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 举报,一经查实,本站将立刻删除。