小编sno*_*nod的帖子

在swift中使用协议作为数组类型和函数参数

我想创建一个可以存储符合特定协议的对象的类.对象应存储在类型化数组中.根据Swift文档协议可以用作类型: 

因为它是一种类型,所以您可以在允许其他类型的许多地方使用协议,包括:

  • 作为函数,方法或初始值设定项中的参数类型或返回类型
  • 作为常量,变量或属性的类型
  • 作为数组,字典或其他容器中的项类型

但是,以下生成编译器错误:

协议'SomeProtocol'只能用作通用约束,因为它具有Self或相关类型要求

你怎么解决这个问题:

protocol SomeProtocol: Equatable {
    func bla()
}

class SomeClass {

    var protocols = [SomeProtocol]()

    func addElement(element: SomeProtocol) {
        self.protocols.append(element)
    }

    func removeElement(element: SomeProtocol) {
        if let index = find(self.protocols, element) {
            self.protocols.removeAtIndex(index)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

generics ios swift swift-protocols

130
推荐指数
6
解决办法
2万
查看次数

在iOS6中进入全屏后,MPMoviePlayerController会中断/停止

我有一个MPMoviewPlayerViewController嵌入到UIView对象中.当我在嵌入模式下启动播放器时,一切正常并且符合预期.如果用户然后点击全屏切换(或者如果我以编程方式使用更改为全屏setFullscreen:animated),则播放器全屏播放,电影播放另一秒,之后屏幕变黑,只有" 正在加载... "消息.

此行为仅在使用iOS 6(也是iPad 6.0模拟器)时出现,在运行iOS 5的设备上,一切都按预期工作.

电影源是​​应用程序包中的本地文件.

播放和进入全屏时,调试输出如下:

2012-09-26 15:24:48.251 [39895:c07] [MPAVController] Autoplay: Disabling autoplay for pause
2012-09-26 15:24:48.252 [39895:c07] [MPAVController] Autoplay: Disabling autoplay
2012-09-26 15:24:48.262 [39895:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-26 15:24:48.265 [39895:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-26 15:24:48.266 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-09-26 15:24:48.267 [39895:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-26 15:24:48.268 [39895:c07] …

fullscreen mpmovieplayercontroller ios ios6

26
推荐指数
3
解决办法
2万
查看次数

如何在Swift中检查标志的位域(特别是SCNetworkReachabilityFlags)?

我有一个SCNetworkReachabilityFlags变量,想要检查它的特定值,例如,如果网络可以通过WWAN访问.

SCNetworkReachabilityFlags类型是typealias用于UInt32与各种选项被定义为Int变量.

使用Objective-C,您可以执行以下操作:

if (flags & kSCNetworkReachabilityFlagsIsWWAN) {
 // do stuff
}
Run Code Online (Sandbox Code Playgroud)

在Swift中如果我试试这个:

if reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN {
 // do stuff
}
Run Code Online (Sandbox Code Playgroud)

你得到一个编译器错误:Could not find an overload for '&' that accepts the supplied arguments.

我已经阅读了一些其他问题,其中位域选项定义为RawOptionSet结构.这还没有完成SCNetworkReachability.

如何检查Swift中的标志?

bitmask ios bit-fields swift

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