[英]how to use Notification.Name extension from swift 3 to Objective-C
我為Notification.Name
創建了一個擴展,如下所示:
public extension Notification.Name {
public static let blahblahblah = Notification.Name(rawValue: "blahblahblah")
}
現在我想在Objective-C中使用這個擴展,但即使它是公共的也無法訪問。
你能告訴我如何在Objective-C和Swift中訪問和使用這個swift擴展嗎?
以前我在Objective-C中使用常量值,但現在為了升級我的代碼,我想使用這個擴展。
我在swift文件中的擴展名
extension Notification.Name {
static let purchaseDidFinish = Notification.Name("purchaseDidFinish")
}
@objc extension NSNotification {
public static let purchaseDidFinish = Notification.Name.purchaseDidFinish
}
// OBJECTIVE-C
#import YourProjectName-Swift.h
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(purchaseDidFinish) name:NSNotification.purchaseDidFinish object:nil];
// SWIFT
NotificationCenter.default.addObserver(self, selector: #selector(purchaseDidFinish), name: .purchaseDidFinish, object: nil)
@objc func purchaseDidFinish(notification: Notification) {
print("purchaseDidFinish")
}
@ leanne的回答非常有幫助
Objective-C中不存在Notification.Name
。 而Objective-C類型NotificationName
實際上只是一個NSString
。 要在Objective-C中使用Swift,該類必須在兩者中都可用,並且不能是Swift結構(比如Notification
或String
)。
要做你想做的事,那么你需要有兩個擴展:
Notification.Name
,就像你一樣; 和, NSString
,或者如果您願意,可能是NSNotification
)。 1)向Swift文件添加與Objective-C兼容的對象擴展:
public extension NSNotification {
public static let blahblahblah: NSString = "blahblahblah"
}
注意:在Swift 4中, 必須為Objective-C兼容性計算屬性 。 那看起來像是:
@objc public extension NSNotification {
public static var blahblahblah: NSString {
return "blahblahblah"
}
}
注意計算屬性中的var
:計算屬性不能是不可變的,所以不能使用let
。
2)在Objective-C文件中,導入Xcode生成的Swift頭文件(在任何其他導入之下):
#import "YourProjectName-Swift.h"
注意:將YourProjectName
替換為項目的實際名稱。 因此,如果您的項目名為“CoolGameApp”,則Swift標題將為“CoolGameApp-Swift.h”。 如果您的項目名稱有空格,例如“酷游戲應用程序”,請用破折號替換它們:“Cool-Game-App-Swift.h”
3)重建項目。
現在,您應該能夠訪問Objective-C中的擴展:
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification.blahblahblah object:self];
除了這里的答案之外,在我的Obj-C代碼可以看到它之前,我必須將@objc添加到我的NSNotification擴展中(Swift 4)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.