我可以创建一个符合内部协议的 iOS 框架并在我的项目中定义相同的协议吗?
Can i create a an iOS framework conforming to an inside protocol and also define the same protocol in my project?
我正在创建一个符合特定协议的框架
MyTestFramework.framework
public protocol SBFProtocol {
static var sharedInstance: SBFProtocol { get }
func GetVersion() -> String
func GetBuildNumber() -> String
}
public final class FrameworkBase : SBFProtocol {
public static var sharedInstance: SBFProtocol = FrameworkBase()
public func GetVersion() -> String {
return "1.0"
}
public func GetBuildNumber() -> String {
return "0"
}
}
然后我在 class 中重新定义相同的协议并导入框架。
我的项目
import MyTestFramework
public protocol SBFProtocol {
static var sharedInstance: SBFProtocol { get }
func GetVersion() -> String
func GetBuildNumber() -> String
}
var testInstance: SBFProtocol = MyTestFramework.FrameworkBase.sharedInstance
有没有办法使用我自己的协议定义来访问该框架对象?
我一直收到错误消息:
类型 'MyTestFramework.SBFProtocol' 的值不符合指定类型 'MyProject.SBFProtocol'
有什么办法吗?
原因是我想将该框架实例传递给另一个框架(称之为 annonymousFramework)并且我希望它只知道 SBFProtocol 而不是整个 MyTestFramework
这有可能吗?
最后我是这样解决的:
我已经将协议包装在它自己的框架项目中(仅包含一个 protocol.swift 文件,其中包含所有定义)
然后我将 protocol.framework 包含在所有使用它的 projects/frameworks 中。
这样编译器将其识别为相同的协议,我从中获得的另一个好处是我可以在我的 protocol/framework 中强制实施最低 iOS 版本、有效的构建架构和更多项目设置混合体。
我正在创建一个符合特定协议的框架
MyTestFramework.framework
public protocol SBFProtocol {
static var sharedInstance: SBFProtocol { get }
func GetVersion() -> String
func GetBuildNumber() -> String
}
public final class FrameworkBase : SBFProtocol {
public static var sharedInstance: SBFProtocol = FrameworkBase()
public func GetVersion() -> String {
return "1.0"
}
public func GetBuildNumber() -> String {
return "0"
}
}
然后我在 class 中重新定义相同的协议并导入框架。
我的项目
import MyTestFramework
public protocol SBFProtocol {
static var sharedInstance: SBFProtocol { get }
func GetVersion() -> String
func GetBuildNumber() -> String
}
var testInstance: SBFProtocol = MyTestFramework.FrameworkBase.sharedInstance
有没有办法使用我自己的协议定义来访问该框架对象?
我一直收到错误消息:
类型 'MyTestFramework.SBFProtocol' 的值不符合指定类型 'MyProject.SBFProtocol'
有什么办法吗? 原因是我想将该框架实例传递给另一个框架(称之为 annonymousFramework)并且我希望它只知道 SBFProtocol 而不是整个 MyTestFramework
这有可能吗?
最后我是这样解决的:
我已经将协议包装在它自己的框架项目中(仅包含一个 protocol.swift 文件,其中包含所有定义)
然后我将 protocol.framework 包含在所有使用它的 projects/frameworks 中。
这样编译器将其识别为相同的协议,我从中获得的另一个好处是我可以在我的 protocol/framework 中强制实施最低 iOS 版本、有效的构建架构和更多项目设置混合体。