我尝试将facebookSDK方法转换为swift代码:
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
user:`(id<FBGraphUser>)user {}
问题在于:
id<FBGraphUser>)user
答案 0 :(得分:1)
<>
在Objective-C中:符合协议
<>
在Swift中用于泛型
如果您只想确认用户的类型是id并且符合FBGraphUser协议:
id是Swift中的AnyObject。
您可以在变量名声明中使用协议作为类型。
func loginViewFetchedUserInfo<T where T: AnyObject, T: FBGraphUser>(loginView: FBLoginView, #user: T)
{
...
}
// use the # only if you want the call of the method to write 'user:'
这更容易。首先,您需要具有该方法的对象,我们称之为facebookObject
。现在,如果您的变量myUser
的类型为AnyObject, FBGraphUser
。以及myLoginView
类型的变量FBLoginView
。然后用
facebookObject.loginViewFetchedUserInfo(loginView: myLoginView, user: myLoginView)
可能是user:
不是必需的,因为这是方法的正常模式。
但是,您可以使用where
关键字
在类型名称后面使用 where 来指定需求列表 - 例如,要求类型实现协议,要求两种类型相同,或者要求类有一个特定的超类。
摘自:Apple Inc.“The Swift Programming Language。”iBooks。