本文介绍了在 Swift 中按协议查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 Swift 中将协议作为参数传递?

How can I pass a protocol as a parameter in Swift?

在 Objective-C 中,我可以这样做:

In Objective-C I could do this:

id <CurrentUserContex> userContex = [ServiceLocator locate:@protocol(CurrentUserContex)];

服务定位器:

+ (id)locate:(id)objectType

编辑

Qbyte 回答后尝试使用:

After Qbyte answer tried using:

ServiceLocator.locate(CurrentUserContex.self)

但我得到CurrentUserContex.Protocol"不确认协议AnyObject"

But I'm getting 'CurrentUserContex.Protocol' does not confirm to protocol 'AnyObject'

所以我尝试了:

ServiceLocator.locate(CurrentUserContex.self as! AnyObject)

但后来我得到:

Could not cast value of type 'ApplicationName.CurrentUserContex.Protocol' (0x7fec15e52348) to 'Swift.AnyObject' (0x7fec15d3d4f8).

推荐答案

如果 CurrentUserContex 是协议本身的名称,我建议使用它:

I would suggest to use this if CurrentUserContex is the name of the protocol itself:

ServiceLocator.locate(CurrentUserContex.self)

如果 CurrentUserContex 是一个类型是协议使用的变量:

If CurrentUserContex is a variable which type is a protocol use:

ServiceLocator.locate(CurrentUserContex)

希望这能解决您的问题

这篇关于在 Swift 中按协议查找的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 04:19