我正在编写媒体播放器应用程序,并创建了自己的框架来管理所有播放器功能.在这个框架中,我有一个名为的公共协议PlayerControllerType和一个内部协议_PlayerControllerType.在PlayerControllerType我已经声明了所有方法和属性,这些方法和属性应该可以从框架外部访问.在_PlayerControllerType我已经定义了几个属性,这些属性由PlayerControllerType框架内部实现的具体类型使用.其中一种类型是PlayerController.其声明如下:
public class PlayerController<Item: Equatable>: NSObject, PlayerControllerType,
_PlayerControllerType, QueueDelegate
Run Code Online (Sandbox Code Playgroud)
现在我想为我的框架中的类提供一些默认实现,它们符合PlayerControllerType和内部_PlayerControllerType,例如:
import Foundation
import MediaPlayer
public extension PlayerControllerType where Self: _PlayerControllerType, Item == MPMediaItem, Self.QueueT == Queue<Item>, Self: QueueDelegate {
public func setQueue(query query: MPMediaQuery) {
queue.items = query.items ?? []
}
}
Run Code Online (Sandbox Code Playgroud)
这在Xcode 7 Beta 4中按预期工作.昨天我更新到Beta 6并得到了这个错误:"Extensions不能公开,因为它的泛型要求使用内部类型"(也见截图).

我发现这个错误很刺激.当然,这延长了我的框架的好处以外没有任何类型,因为它不能访问内部协议_PlayerControllerType,但它是我的框架内的类型的同时实现是非常有用的PlayerControllerType和_PlayerControllerType.
这只是Swift编译器中的一个错误,还是预期的行为?非常不幸的是,这不再适用了,因为现在我必须将这些方法放入一个新创建的基类中,用于所有的PlayerControllers.
任何帮助或反馈将非常感谢.
凯
编辑:以下是协议及其扩展的缩写示例:
public protocol PlayerControllerType {
typealias Item …Run Code Online (Sandbox Code Playgroud) 我有一个带有三个子模块的git存储库。包含的存储库有两个分支master和develop。所有子模块只有一个分支– master分支。
当包含的存储库位于master分支上时,git push --recurse-submodules=on-demand将按预期方式通过原点推送。包含项目及其子模块均被推送。
现在这是问题所在。当包含存储库在develop分支上时,通过推送时出现问题git push --recurse-submodules=on-demand。推送操作被取消,并显示错误消息。
这是我从git获得的完整输出:
$ git push --recurse-submodules=on-demand
fatal: src refspec 'refs/heads/develop' must name a ref
fatal: process for submodule 'Frameworks/OpenLearnWareClient' failed
Run Code Online (Sandbox Code Playgroud)
我可以通过首先手动推送每个子模块中的更改,然后推送包含的存储库来缓解此问题。但是,这非常繁琐,并且违反了的目的--recurse-submodules=on-demand。
这是我的.gitmodules文件:
[submodule "Frameworks/OpenLearnWareKit"]
path = Frameworks/OpenLearnWareKit
url = git@github.com:kaiengelhardt/OpenLearnWareKit.git
branch = master
[submodule "Frameworks/OpenLearnWareClient"]
path = Frameworks/OpenLearnWareClient
url = git@github.com:kaiengelhardt/OpenLearnWareClient.git
branch = master
[submodule "Frameworks/KEFoundation"]
path = Frameworks/KEFoundation
url = git@github.com:kaiengelhardt/KEFoundation.git
branch = master
Run Code Online (Sandbox Code Playgroud)
我正在使用git版本2.20.1(Apple Git-117)。
有人知道这里出了什么问题以及如何进行递归推送吗?