arrays – Swift 3,Extend Array,其中Array的项目属于某种类型
发布时间:2020-12-14 04:42:47 所属栏目:百科 来源:网络整理
导读:我写了一个包含基本资产数据的结构: struct Asset: AssetProtocol { init (id: Int = 0,url: String) { self.id = id self.url = URL(string: url) } var id: Int var url: URL?} 它订阅了AssetProtocol protocol AssetProtocol { var id: Int { get } var
我写了一个包含基本资产数据的结构:
struct Asset: AssetProtocol { init (id: Int = 0,url: String) { self.id = id self.url = URL(string: url) } var id: Int var url: URL? } 它订阅了AssetProtocol protocol AssetProtocol { var id: Int { get } var url: URL? { get } } 我希望扩展Array(Sequence),其中该Array中的元素是订阅AssetProtocol的项目.此外,这些函数能够在适当的位置改变数组. extension Sequence where Iterator.Element: AssetProtocol { mutating func appendUpdateExclusive(element newAsset: Asset) { ... 我怎样才能迭代并改变这个序列?我已经尝试了六种方法,似乎无法做到正确! 解决方法
而不是使用将Asset作为参数的方法,而是考虑重用Element.由于您已在扩展定义中定义了Element上的约束,因此AssetProtocol上的所有方法和属性都将在Element实例上可用:
protocol AssetProtocol { var id: Int { get } var url: URL? { get } static func someStaticMethod() func someInstanceMethod() } extension Array where Element:AssetProtocol { mutating func appendUpdateExclusive(element newAsset: Element) { newAsset.someInstanceMethod() Element.someStaticMethod() append(newAsset) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Cocos2D-Android-1之源码详解:7.CocosNodeTest
- cocos2dx lua解析csv成lua配置文件,方便程序调用
- xajax中的中文乱码问题
- objective-c – Mac OS X相当于SecureZeroMemory
- 使用XmlTextReader 读取XML
- logback.xml配置如何按天输出日志文件
- 无法安装程序包“Newtonsoft.Json 6.0.4”。你正
- ruby-on-rails – 使用simple_form和rails创建多
- 无法使用ruby selenium webdriver连接到浏览器
- Vue+ElementUI实现表单动态渲染、可视化配置的方
热点阅读