gpt4 book ai didi

objective-c - 从混合语言项目中的枚举元素初始化一个 NSNumber

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:02 25 4
gpt4 key购买 nike

我在 XCode 6 中有一个混合语言项目,Objective C 和 Swift。

单例.h

#import <Foundation/Foundation.h>

enum {
enum_A = 0,
enum_B,
enum_C,
enum_D,
enum_E,
enum_F,
enum_G,
} enums;

@interface Singleton : NSObject

+ (id)sharedSingleton;

@end

单例.m

// Nothing's special in this file

#import "Singleton.h"

static Singleton *shared = nil;

@implementation Singleton

- (id)init {
self = [super init];
if (self) {

}
return self;
}

#pragma mark - Interface

+ (Singleton *)sharedSingleton {
static dispatch_once_t pred;

dispatch_once(&pred, ^{
shared = [[Singleton alloc] init];
});

return shared;
}

@end

ViewController.swift

import UIKit

class ViewController: UIViewController {

let singleton = Singleton.sharedSingleton() as Singleton

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

let n = NSNumber(char: enum_E) // ERROR HERE!!!
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

(当然,我必须设置桥接头文件,添加了#import "Singleton.h")。

错误是:

Cannot invoke 'init' with an argument list of type '(char: Int)'

很奇怪,Swift 仍然可以识别enum_E(我看到它变成了蓝色)但是仍然弹出这个错误。我尝试了 (char)enum_E 但还是不行。

你有什么想法吗?

谢谢,

最佳答案

好吧,显然在 Objective-C 和 Swift 中创建的枚举之间确实存在差异。我假设没有区别,因此我只在 Swift Playground 中测试了我的方法。


enum 在 Swift 中创建

// UInt32 used to have the same underlying type in both examples
enum TestEnum : UInt32 {
case A, B, C
}

var x = NSNumber(unsignedInt: TestEnum.C.rawValue)
// x == 2

要从 Swift 中的枚举值中获取原始值,您必须显式地将枚举值转换为原始值。这可以通过将 .rawValue 添加到您的枚举值来完成。


enum 在 Objective-C 中创建

Objective-C

enum TestEnum {
A = 0,
B = 1,
C = 2
};

swift

let x : TestEnum = C
var number = NSNumber(unsignedInt: C.value) // alternative: x.value
println("the number is \(number)")
// Outputs: the number is 2

与 Swift 枚举的区别似乎是您必须使用 .value 而不是 .rawValue 并且您不能在它们前面加上类型前缀。本例中的原始类型是 UInt32

在 Xcode 6.1.1、iOS SDK 8.1、iOS 模拟器 8.1 中测试

关于objective-c - 从混合语言项目中的枚举元素初始化一个 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com