qua*_*yen 4 enums objective-c nsnumber swift
我在XCode 6中有一个混合语言项目Objective C和Swift.
Singleton.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
Run Code Online (Sandbox Code Playgroud)
Singleton.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
Run Code Online (Sandbox Code Playgroud)
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.
}
Run Code Online (Sandbox Code Playgroud)
}
(当然我必须设置桥接头文件,已#import "Singleton.h"添加).
错误是:
无法使用类型'(char:Int)'的参数列表调用'init'
很奇怪,Swift仍然可以识别enum_E(我看到它用蓝色着色)但仍然弹出这个错误.我试过(char)enum_E但仍然没有运气.
你有什么想法?
谢谢,
好吧,显然在Objective-C和Swift中创建的枚举之间存在差异.我认为没有区别,因此我只在Swift游乐场测试了我的方法.
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
Run Code Online (Sandbox Code Playgroud)
要从Swift中的枚举值中获取原始值,您必须将枚举值显式转换为原始值.这可以通过添加.rawValue到枚举值来完成.
enum 在Objective-C中创建
Objective-C的
enum TestEnum {
A = 0,
B = 1,
C = 2
};
Run Code Online (Sandbox Code Playgroud)
迅速
let x : TestEnum = C
var number = NSNumber(unsignedInt: C.value) // alternative: x.value
println("the number is \(number)")
// Outputs: the number is 2
Run Code Online (Sandbox Code Playgroud)
Swift枚举的不同之处似乎是你必须使用.value而不是.rawValue你不能用它们作为前缀.在这种情况下的原始类型是UInt32.
在Xcode 6.1.1,iOS SDK 8.1,iOS模拟器8.1中测试
| 归档时间: |
|
| 查看次数: |
6007 次 |
| 最近记录: |