Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Swift通用协议

Swift通用协议
EN

Stack Overflow用户
提问于 2014-08-01 06:43:24
回答 2查看 4.1K关注 0票数 11

是否有可能有一个通用协议的快速?我试过protocol foo<T>{},这是不合法的。我正在寻找类似于Java的List<T>接口的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-01 06:59:39

协议中没有泛型这样的东西。但是还有其他的东西,当你看它的时候,它对仿制药有很大的意义。

以下是Swift标准库中的一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protocol Generator {
    typealias Element
    func next() -> Element?
}

斯威夫特的书在泛型一章“关联类型”中触及了表面。

票数 11
EN

Stack Overflow用户

发布于 2020-02-24 10:32:20

可以使用带有关联类型声明的协议在Swift中实现Java列表接口的相同功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//  Created by Juan Miguel Pallares Numa on 2/24/20.
//  Copyright © 2020 Juan Miguel Pallares Numa. All rights reserved.

import Foundation

protocol List {

    // An associated type gives a placeholder name to a type
    // that is used as part of the protocol.
    associatedtype Element

    func add(index: Int, element: Element)
    func get(index: Int) -> Element
}

class ArrayList<Element>: List {

    private var items: [Element] = []

    func add(index: Int, element: Element) {
        items.insert(element, at: index)
    }

    func get(index: Int) -> Element {
        return items[index]
    }
}

let arrayOfInts = ArrayList<Int>()
let arrayOfStrings = ArrayList<String>()

arrayOfInts.add(index: 0, element: 17)
arrayOfInts.add(index: 1, element: 19)
print("arrayOfInts[1] is \(arrayOfInts.get(index: 1))")
// arrayOfInts[1] is 19

arrayOfStrings.add(index: 0, element: "Generics - The Swift Programming Language")
print("arrayOfStrings[0] is \(arrayOfStrings.get(index: 0))")
// arrayOfStrings[0] is Generics - The Swift Programming Language

/* (lldb) expr print(arrayOfInts.items)
[17, 19]
(lldb) expr print(arrayOfStrings.items)
["Generics - The Swift Programming Language"] */

这些文档本身最能说明问题。请参阅https://docs.swift.org/swift-book/LanguageGuide/Generics.html#ID189中的关联类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25082769

复制
相关文章
Swift基础 通用
翻译自:https://docs.swift.org/swift-book/LanguageGuide/Generics.html
郭顺发
2023/07/17
1100
Swift基础 协议
翻译自:https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
郭顺发
2023/07/17
1580
Swift学习:协议
本篇将详细总结介绍Swift协议的用法; 协议是定义一些规范(属性、功能方法),然后由类、结构体或者枚举遵循并实现这些规范,这一过程被称为遵循了协议。
梧雨北辰
2018/08/09
4890
Swift入门:协议
协议在Swift中是有效的契约:它们定义了一组方法和属性,如果一个类型说它遵守协议,那么它必须实现这些方法和属性。这个合同让我们可以灵活地使用不同的类型来解决同一个问题——我们不知道是使用ThingA还是ThingB,只要它们都符合Thing协议。
韦弦zhy
2020/03/19
5200
Swift — 协议(Protocol)
协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体和枚举都可以遵循协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵循这个协议。
Swift社区
2021/11/26
1.1K0
Swift — 协议(Protocol)
Swift之Hashable协议
符合Hashable协议的任何类型,既可以在集合(Set)中使用,也可以作为字典键使用。默认情况下,标准库中的许多类型都符合Hashable:字符串,整数,浮点和布尔值,还有事件集合(even sets)。其他类型(例如,选项(optionals),数组(Array)和范围(Range))在其类型参数实现符合hashable时就会自动变为hashable。
SheltonWan
2019/07/01
4.1K0
Swift 进阶: 协议 Protocol
本篇文章主要讲解 Swift 中常用的协议协议Protocol,主要分析protocol的用法及底层存储结构。
Swift社区
2021/11/26
1.6K0
Swift 进阶: 协议 Protocol
Swift入门:协议扩展
Swift最强大的功能之一就是能够同时扩展整个数据类型。 这被称为协议扩展,它们通常用于在大型应用程序中构建灵活性。
韦弦zhy
2020/03/19
8490
Swift 2.2 协议和代理
一:代理      两个类之间的传值,类A调用类B的方法,类B在执行过程中遇到问题通知类A,这时候我们需要用到代理(Delegate)。     比如:控制器(Controller)与控制器(Controller)之间的传值,从C1跳转到C2,再从C2返回到C1时需要通知C1更新UI或者是做其它的事情,这时候我们就用 到了代理(Delegate)传值。 二:协议     上面说的两个界面,或者类之间的值传递,你就把协议当成他们之间的合同,就理解了。     下面看看Swift代码怎么写协议,为了方便阅读,我
Mr.RisingSun
2018/01/09
6350
Swift3.0 - 协议protocol
学习目标 swift中的协议和OC 中协议的区别 swift中的协议的用法 怎么使用 swift和Object-C 协议的区别 1.OC 中的协议只能用于类,swift中的协议不仅能用于类,还能用于结构体和枚举 2.OC 中的协议可以设置可选实现,但Swift中的协议必须实现 3.Swift中的协议增加了一个关键字mutating可以决定结构体和枚举实现协议的时候,是否可以修改属性的值 ---- Swift协议(protocol) 定义一个协议 protocol LoveMusic{ f
酷走天涯
2018/09/14
4710
20.Swift学习之协议
协议为方法、属性、以及其他特定的任务需求或功能定义一个大致的框架。协议可被类、结构体、或枚举类型采纳以提供所需功能的具体实现。满足了协议中需求的任意类型都叫做遵循了该协议。
YungFan
2018/12/12
3240
iOS - Swift 面向协议编程(一)
OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法的具体实现,而OC不行 面向对象开发 传统的面向对象开发思维方式是将类中实现的相似方法抽取出来,接着放入一个Base类,然后继承于Base类后各个类即可找拥有相同的方法,不用再一个个手动实现。 比如:一个Person类,一个Dog类,它们都拥有方法eat,那么就可以新建一个Animal类,将eat方法抽取出来放入其中,然后将Person类和Dog类都继承于Animal。 但是,如果现在又有一个Robot类,也需要拥有eat方
LinXunFeng
2018/06/29
7050
30.Swift学习之Codable协议
开发中推荐使用Paste JSON as Code • quicktype软件,可以根据JSON快速生成Model文件
YungFan
2019/08/14
8180
swift 简易操作sqlite3 之 通用查询
上篇文章我们写了关于SQLite的简单操作和一些基本常识,对此陌生的童鞋可以参考之前的文章(swift简易操作sqlite3),今天我们在此基础上进一步加工处理,写出通用查询操作方法
大话swift
2019/07/03
1.4K0
swift 简易操作sqlite3 之 通用查询
Swift专题讲解二十一——协议 原
        协议约定了一些属性与方法,其作用类似Java中的抽象类,Swift中类型通过遵守协议来实现一些约定的属性和方法。Swift中的协议使用protocol关键字来声明。Swift中的协议还有一个十分有意思的特性,协议可以通过扩展来实现一些方法和附加功能。
珲少
2018/08/15
2860
Swift 泛型之条件性符合协议
Swift 泛型条件性符合(Conditional conformances) 表示泛型类型只有在其类型参数满足某些要求时才符合特定协议的概念。
韦弦zhy
2021/04/08
1.5K0
Swift5.8 中 AnyKeyPath 支持 CustomDebugStringConvertible 协议
本篇提议目的是为了让AnyKeyPath支持实现CustomDebugStringConvertible协议。
DerekYuYi
2022/11/10
6500
利用Swift协议替换历史遗留的代码
维护任何应用程序、框架或系统的一个重要部分是处理历史代码。无论一个系统的架构有多好,历史遗留问题总是会随着时间的推移而被建立起来——这可能是因为底层SDK的变化,因为功能集的扩展,或者仅仅是因为团队中没有人真正知道某个特定部分是如何工作的。
韦弦zhy
2022/03/30
4640
iOS - Swift 创建代理协议的多种方式
�假如有一个类为 LXFView,现在要为这个类创建一个代理协议,我们该如何做呢? 首先,代理协议的命名方式:类名 + Delegatev protocol LXFViewDelegate { func view(_ view: LXFView) } 当我们创建的协议遵守其它协议的情况下,只是这样写并不会报错,接下来我们在LXFView中添加一个代理属性,为避免循环引用,代理属性需要用weak修饰 class LXFPageView: UIView { weak var deleg
LinXunFeng
2018/06/29
4790
iOS - Swift 面向协议编程(二)面向对象开发
上一篇文章iOS - Swift 面向协议编程(一) 已经对Swift的面向协议编程做了介绍,接下来该篇文章将使用面向协议开发(POP)来做下实际的应用 在实际开发中,自定义View基本上是必须
LinXunFeng
2018/06/29
6110

相似问题

Swift:通用协议

21

Swift协议专用通用协议

13

Swift通用协议问题?

10

Swift 3中通用协议中的通用协议

14

Swift协议作为通用参数

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文