【问题标题】:Access to custom Obj-C category from Swift从 Swift 访问自定义 Obj-C 类别
【发布时间】:2014-06-11 20:59:47
【问题描述】:

我正在尝试访问 Swift 文件中的这个自定义 obj-C 类别:

#import "NSString+UUID.h"

@implementation NSString (UUIDCategory)

+ (NSString*)stringWithUUID 
{
    CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
    NSString *string = (NSString*)CFMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, uuid));
    CFRelease(uuid);
    return [string autorelease];    
}

@end

所以,我补充说:

#import "NSString+UUID.h" 

在我的桥接头中,但找不到使用它的解决方案。

var string = NSString.stringWithUUID()

编辑:代码现在似乎可以工作(问题是在导入类别之前我没有在桥接头中包含#import Foundation/Foundation.h。

【问题讨论】:

  • 这是一个工厂方法,Swift 会自动为你创建一个初始化器! NSString(UUID:uuid)
  • 编译器写道:模块名称后的预期模块成员名称。
  • 不要用答案编辑您的问题。发布实际答案并将其标记为已接受。
  • 还有NSUUID().UUIDString有什么问题?
  • Abhi:我没有使用这种 Apple 方法,因为几个月前我的应用也在 iOS 5 上运行...... ;)

标签: categories swift


【解决方案1】:

这是一个工厂方法,Swift 会自动为你创建一个初始化器!

你应该可以这样使用它:

 let string = NSString(UUID:uuid)

题外话,但你真的应该采用 ARC :]

【讨论】:

  • 但是我在一个 Swift 文件中……而不是在一个 Obj 文件中。 ;) 我编辑了我的消息并找到了解决方案。谢谢。
  • 是的,但是没有用。这没关系:让 string = NSString.stringWithUUID() - 这是 KO:让 string2 = NSString(UUID:uuid) - 模块名称后的预期模块成员名称
  • 嗯,如果初始化语法对您不起作用,那可能是因为编译器没有将您的工厂方法识别为工厂方法。尝试将(NSString *) 更改为(instancetype),它应该可以工作。 NSString.stringWith... 这样的语法不是你应该在 Swift 中使用的
猜你喜欢
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2015-12-02
  • 2018-02-23
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多