如何在 Swift 中创建通用协议?

2023-12-07

我想创建一个协议,其中的方法接受通用输入并返回通用值。

这是我到目前为止所尝试过的,但它会产生语法错误。

使用未声明的标识符 T。

我究竟做错了什么?

protocol ApiMapperProtocol {
    func MapFromSource(T) -> U
}

class UserMapper: NSObject, ApiMapperProtocol {
    func MapFromSource(data: NSDictionary) -> UserModel {
        var user = UserModel() as UserModel
        var accountsData:NSArray = data["Accounts"] as NSArray     
        return user
    } 
}

对于协议来说有点不同。查看“关联类型”在苹果的文档中.

这就是您在示例中使用它的方式

protocol ApiMapperProtocol {
    associatedtype T
    associatedtype U
    func MapFromSource(_:T) -> U
}

class UserMapper: NSObject, ApiMapperProtocol {
    typealias T = NSDictionary
    typealias U = UserModel

    func MapFromSource(_ data:NSDictionary) -> UserModel {
        var user = UserModel()
        var accountsData:NSArray = data["Accounts"] as NSArray
        // For Swift 1.2, you need this line instead
        // var accountsData:NSArray = data["Accounts"] as! NSArray
        return user
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中创建通用协议? 的相关文章

  • 如何减去日期分量?

    就像今天一样Friday 即6根据NSCalendar 我可以使用以下方法得到这个 Calendar current component weekday from Date 我如何获得工作日部分Saturday上周 应该是7 如果我做Cal
  • UIDatePicker,显示带有年份和时间的完整日期

    你能有一个UIDatePicker在 DatePicker 上显示日 月 年和时间 或者我需要进行自己的自定义UIPickerView i e 2000 年 11 月 12 日星期一 5 20 AM 目前日期选择器 datePickerMo
  • 如何在 Swift 中使用 AXObserverAddNotification?

    如何在 Swift 中使用 AXObserverAddNotification 来检测 UI 更改 Obj C 中有一个很好的答案 我的应用程序如何检测另一个应用程序窗口的更改 https stackoverflow com questio
  • 获取最顶层的 UIViewController

    我似乎无法到达最顶端UIViewController无法访问UINavigationController 这是我到目前为止所拥有的 UIApplication sharedApplication keyWindow rootViewCont
  • 使用 AVAssetWriter 录制视频:第一帧是黑色的

    我正在录制视频 用户也可以切换到仅音频 AVAssetWriter 我在应用程序启动时开始录制 但是第一帧是黑色的 或非常暗 当我从音频切换到视频时也会发生这种情况 感觉就像是AVAssetWriter and or AVAssetWrit
  • 如何计算iOS 11不同方向的尺寸?

    我根据具有水平滚动和自定义布局的 UICollectionView 的安全区域来计算 itemSize 但对于 iPhone X 来说 安全区域对于不同的方向有不同的大小 我的问题是如何计算 viewWillTransition 函数中横向
  • 如何快速将 void 块传递给 objc_setAssociatedObject

    我正在尝试通过扩展向 UIView 添加点击手势支持 使用 Objective C 非常简单 但是当我尝试在运行时属性上设置 void 返回块时 出现以下错误 错误 类型 gt Void 不符合协议 AnyObject 这是计算的属性 va
  • Apple Watch 表 - 前 4 行未出现

    我在添加行时遇到问题WKInterfaceTable在苹果手表上 奇怪的是 无论我做什么 前 4 行都显示为空 我尝试手动添加行并循环 没关系 我相信我的代码很好 因为第五行和其他行看起来都很好 发生的情况如下 进一步滚动 My code
  • 如何在 Swift 中按换行符分割字符串

    我有一个从文本文件中获得的字符串 文本文件 Line 1 Line 2 Line 3 我想将其转换为数组 每行一个数组元素 Line 1 Line 2 Line 3 根据文件的保存方式 字符串可能采用以下形式之一 string Line 1
  • 如何将 UserDefaults 与 SwiftUI 结合使用?

    struct ContentView View State var settingsConfiguration Settings struct Settings var passwordLength Double 20 var moreSp
  • Google 登录服务器验证码无 iOS?

    我们让 Google 登录您的应用程序 我们在请求登录时提供服务器客户端 ID 我们得到的 user serverAuthCode 为 nil 我们的要求如下 func googleLogin var configureError NSEr
  • 遵守协议并保持财产私有

    我需要将符合类中的协议属性用作私有属性 但编译器拒绝这样做 我怎样才能实现呢 protocol ProtocolX class var x Int get set func performAnyActionOnX extension Pro
  • 计算 Swift 4 中的时差

    如果我有两个变量 10 30 和另一个 1 20 有没有办法获得它们之间的 2小时50分钟 的时间差 我在下面尝试过这个 func calcTime time1 String time2 String gt String let time1
  • XCode 12.5 缺少权利 com.apple.developer.linked-appclip-app-identifiers

    将 Xcode 版本更新到 12 5 后 我遇到了 App Clip 问题 在 App Store Connect 上传期间 我收到警告 TMS 90876 Missing entitlement This app contains an
  • 如何在原生 Swift 中实现以前称为 NSMutableOrderedSet 的可变有序集泛型类型?

    我正在尝试实现一个通用的可变有序集类型 它需要符合许多协议才能以与 Swift 中的数组和集合相同的方式运行 首先要实现泛型类型元素需要符合Hashable https developer apple com documentation s
  • 使 Swift 类符合需要 init 的协议

    我有以下内容protocol in Swift protocol FooConvertible typealias FooType init foo FooType 我会做Swift类在类定义中符合它 class Bar FooConver
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 如何在 SKAction 中途反转精灵所遵循的路径方向?

    我有一个 SKSpriteNode 它使用 SKAction 沿着圆形路径移动 create the path our sprite will travel along let circlePath CGPathCreateWithElli
  • 包含字符串和数字的数组

    在 Objective C 中 很容易创建一个异构数组 如下所示 NSArray myArray String1 String2 123 456 有什么方法可以快速创建这样的数组吗 如果是的话怎么办 Note 我在 swift 中尝试了类似
  • 您可以严格泛型类型或为一个参数指定多个类型吗?

    例如我想指定一个类型可能是Integer or String并将其用作特殊类型func我试过typealias但它不会解决这个问题 因为类型别名不能有or参数作为其唯一用途 因此请考虑下面的情况 typealias alis StringP

随机推荐