このコードをSwiftに変換したい。ここでのObjective-Cコードは、シングルトンオブジェクトを作成しています(私がそのように記述できる場合)。 dispatch_once_tを使用して変換することはできますが、「static let bundle:NSBundle!」と似たようなより洗練された方法を使用します。しかし、 "static let bundle:NSBundle!"は、格納されたプロパティを許可していないので、拡張子では使用できません。どのようにしてシングルトンを作るためにクラスエクステンションにスタティック(ストアド)プロパティを追加できますか? (Swift)
dispatch_once_tなしでコードを変換することは可能ですか?
そして私は、私はクラス拡張
@implementation NSBundle(CTFeedback)にプロパティを格納していないという問題に直面した
+ (NSBundle *)feedbackBundle
{
static NSBundle *bundle = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
NSBundle *classBundle = [NSBundle bundleForClass:[CTFeedbackViewController class]];
NSURL *bundleURL = [classBundle URLForResource:@"CTFeedback" withExtension:@"bundle"];
if (bundleURL) {
bundle = [NSBundle bundleWithURL:bundleURL];
} else {
bundle = [NSBundle mainBundle];
}
});
return bundle;
}
@end
マイスウィフトコード:
extension NSBundle
{
static func feedbackBundle()-> NSBundle
{
static let bundle: NSBundle! //!! **Compiler Error here**
let classBundle = NSBundle.init(forClass: CTFeedbackViewController.self)
let bundleURL = classBundle.URLForResource("CTFeedback", withExtension: "bundle")
if let bundleURL2 = bundleURL
{
bundle = NSBundle(URL: bundleURL2)
}
else
{
bundle = NSBundle.mainBundle()
}
return bundle;
}
}
更新:
人々のおかげで、私は今これが好きです。私は
private class FeedbackBundle
{
static let classBundle = NSBundle.init(forClass: CTFeedbackViewController.self)
}
extension NSBundle
{
static func feedbackBundle()-> NSBundle
{
let bundleURL = FeedbackBundle.classBundle.URLForResource("CTFeedback", withExtension: "bundle")
if let bundleURL2 = bundleURL
{
return NSBundle(URL: bundleURL2)!
}
else
{
return NSBundle.mainBundle()
}
}
}
エラーとは何か、おそらく 'self'で試してみる – meda