你可以调用任何类方法到AnyClass
// ↓
var networks: Dictionary<String, AnyClass> = [
"facebook": PFFacebookUtils.self,
"twitter": PFTwitterUtils.self
];
var flag = networks[network]?.isLinkedWithUser(user)
if flag == nil {
// no such network
}
else if flag! {
// linked
}
else {
// not linked
}
如果您不知道? 的含义,请参阅this document。
如果您确定networks[network] 存在:
var flag = networks[network]!.isLinkedWithUser(user)
if flag {
// linked
}
else {
// not linked
}
添加:
关于unlinkUserInbackground 方法。
起初,我不知道编译器找不到此方法的确切原因,可能是错误,也可能不是。以下是我找到的解决方法。
unlinkUserInbackground 方法有 3 种变体
class func unlinkUserInBackground(user: PFUser!) -> BFTask!
class func unlinkUserInBackground(user: PFUser!, block: PFBooleanResultBlock!)
class func unlinkUserInBackground(user: PFUser!, target: AnyObject!, selector: Selector)
我认为,它相互冲突。
如果你像这样在YourProduct-Bridging-Header.h 中导入Bolts 框架:
#import <ParseFacebookUtils/PFFacebookUtils.h>
#import <Bolts/Bolts.h>
然后,你可以调用第一个。
let cls:AnyClass = networks[network]!
let task = cls.unlinkUserInBackground(user)
对于最后两个,我发现的解决方法是...声明这样的协议。
@objc protocol SNSUtils {
class func unlinkUserInBackground(user: PFUser!, block: PFBooleanResultBlock!)
class func unlinkUserInBackground(user: PFUser!, target: AnyObject!, selector: Selector)
}
// ...
let cls:AnyClass = networks[network]!
cls.unlinkUserInBackground(user, block: { (success, err) -> Void in
println("sucess: \(success) err: \(err)")
})
我知道,这很奇怪,但它实际上在我的环境中工作。