小编Kai*_*rdt的帖子

无法声明具有内部要求的公共协议扩展

我正在编写媒体播放器应用程序,并创建了自己的框架来管理所有播放器功能.在这个框架中,我有一个名为的公共协议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不能公开,因为它的泛型要求使用内部类型"(也见截图). Xcode中的错误

我发现这个错误很刺激.当然,这延长了我的框架的好处以外没有任何类型,因为它不能访问内部协议_PlayerControllerType,但它是我的框架内的类型的同时实现是非常有用的PlayerControllerType_PlayerControllerType.

这只是Swift编译器中的一个错误,还是预期的行为?非常不幸的是,这不再适用了,因为现在我必须将这些方法放入一个新创建的基类中,用于所有的PlayerControllers.

任何帮助或反馈将非常感谢.

编辑:以下是协议及其扩展的缩写示例:

public protocol PlayerControllerType {
    typealias Item …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swift-extensions swift-protocols

6
推荐指数
1
解决办法
3172
查看次数

如果包含项目不在master分支上,则递归推送子模块将抛出“致命错误:src refspec必须命名一个引用”

我有一个带有三个子模块的git存储库。包含的存储库有两个分支masterdevelop。所有子模块只有一个分支– 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)。

有人知道这里出了什么问题以及如何进行递归推送吗?

git git-submodules

5
推荐指数
1
解决办法
372
查看次数