如何在Swift中符合协议?

时间:2014-06-11 08:42:57

标签: swift

我尝试将facebookSDK方法转换为swift代码:

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                        user:`(id<FBGraphUser>)user {}

问题在于:

id<FBGraphUser>)user

1 个答案:

答案 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