子类化与子类化协议

2023-12-14

让我们从Class方法:

class LoginCredentials {

    var id : String

    init(userID:String) {
        self.id = userID
    }
}

那么我们将得到以下内容:

class FacebookLoginCredentials : LoginCredentials {

var token : String
init(userID:String,userToken:String) {

    self.token = userToken    
    super.init(userID: userID)
}}

And

class TwitterLoginCredentials  : LoginCredentials {
var token : String
var secret : String
init(userID:String,userToken:String,secret : String) {

    self.token = userToken
    self.secret = secret
    super.init(userID: userID)
}
}

第二种方法是Protocol Oriented如果我没记错的话

protocol LoginCredentials {

    var id : String { get }
}

那么我们将有:

struct FacebookLoginCredentials : LoginCredentials {

var id: String
var token : String
init(userID:String,userToken:String) {

    self.id = userID
    self.token = userToken
}
}

And

struct TwitterLoginProfile : LoginCredentials {
var id: String
var token : String
var secret : String

init(userID:String,userToken:String,secret : String) {

    self.token = userToken
    self.secret = secret
    self.id = userID
}
}

我只需要知道哪一个更 Swift ?


最终,这些方法都不是“更迅速”。在 Swift 中,您有时会想使用继承,有时您会想使用协议。这两种方法的真正决策点是:

您想要值类型语义(结构和协议)还是想要引用类型语义(类和协议)。我通常默认使用值类型语义,因为它们更安全,但在某些情况下引用类型语义肯定很重要。您可以在这里阅读更多相关内容:为什么选择结构而不是类.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子类化与子类化协议 的相关文章

随机推荐

  • iPhone SDK 上的 PDF 操作

    我一直在阅读Apple的文档 他们推荐使用UIWebView 这一切都很好 直到您想要转到页码并搜索 PDF 是否有任何第三方库 免费或付费 可以执行此操作 至少我需要能够搜索并转到 PDF 中的页码 我查看过 PDFKit 不可用 并且
  • Laravel:让 Eloquent 创建嵌套 SELECT 的正确方法

    我试图雄辩地生成的查询是 SELECT SELECT COUNT comment id FROM comment AS c WHERE c approved true AND c blog fk b blog id AS comment c
  • 如何在 script# 中编写一个函数,以便使用任何对象调用,而不仅仅是定义它的类的实例?

    我正在 script 中编写 javascript 我想写一个看起来像的函数 function myFunc if this value gt 100 return true else return false 可以使用任何具有属性 val
  • Openshift - 我可以使用 Openshift 运行 docker 客户端命令(如 docker Push)吗?

    当您拥有 Docker 主机时 使用 Docker 会很容易 您将 Docker 客户端与 Docker 主机 引擎 连接 那么构建和部署 复杂的 docker 镜像的过程就像是 Jenkins 构建服务器上的这一系列命令 Maven cl
  • c中的for循环括号

    我编写了一个程序来使用 for 循环打印整数值 打印后 程序应该等待一秒钟 之后这些整数将被双空格字符覆盖 换句话说 程序的目的是在等待一秒后删除这些整数 这是程序 include
  • 在单个线性图中绘制多个字典/数据框

    我正在从多个词典中的某个来源收集数据 如下所示 d1 01 01 2018 15 02 01 2018 15 03 01 2018 15 d1 01 01 2018 20 02 01 2018 25 03 01 2018 56 d1 01
  • 在 .NET 中将字符串转换为 System.Color

    我正在尝试在 VB NET 上制作此应用程序 其中用户可以更改应用程序的背景颜色 当应用程序关闭时 颜色应保存到 XML 节省是小菜一碟 但现在真正的困境是如何转换字符串 Color white to a System Color 我已经用
  • addSnapShotListener 会触发所有依赖它的函数吗?

    据我了解 当 FireStore 中的数据发生变化时 AddsnapshotListener 会实时触发 但是 我不确定下面的代码中会触发哪个函数 只有函数C被触发吗 还是所有功能 如果所有函数都运行 函数 A 的参数会发生什么 func
  • Rails 不为生产或临时环境中的资产提供服务

    调试过程中这个问题 我尝试在本地生产模式下运行我的应用程序 但它不提供任何资产 另外 我有一个stagingHeroku 应用程序 与我的生产 Heroku 应用程序分开 中的环境现在也显示没有任何资产的 HTML 为了调试 我 杀死服务器
  • 如何向 symfony 会话添加额外的包

    我想为 symfony 会话添加一个额外的包 我在编译器通道中这样做 public function process ContainerBuilder container bag new AttributeBag my session at
  • 安装 python 时在 $PATH 中找不到可接受的 C 编译器

    我正在尝试在我的共享主机上安装新的 Python 环境 我按照中写的步骤操作这个帖子 mkdir src wget http www python org ftp python 2 7 1 Python 2 7 1 tgz tar zxvf
  • Oracle:加载一个大的 xml 文件?

    现在我有大量我感兴趣的 XML 数据 https blog stackoverflow com 2009 06 stack overflow creative commons data dump 我想将其加载到 Oracle 中来玩 如何将
  • 部分应用的功能[重复]

    这个问题在这里已经有答案了 在学习函数式编程时 部分应用函数的概念经常出现 在 Haskell 中 类似内置函数的东西take被认为是部分应用的 我仍然不清楚部分应用函数的确切含义或其使用 含义 函数本身不能 部分应用 或不 部分应用 这是
  • DjangoForeignKey 中的循环依赖?

    我在 Django 中有两个模型 A b ForeignKey B B a ForeignKey A 我希望这些外键不为空 但是 我无法创建对象 因为在我 save 之前它们没有 PrimaryKey 但如果没有其他对象 PrimaryKe
  • 使用“#”作为分隔符时 Read.table 不起作用?

    我有一个数据文件 符号作为分隔符 我想用read file命令 首先 这是一个大数据文件 我不想更改分隔符 因为 使用数据中已存在的不同分隔符的风险 注意 可以检查 但第 2 点使这变得更加复杂 我希望有更多这些数据文件 符号作为分隔符 所
  • 可扩展方式访问 ConcurrentHashMap 的每个元素一次

    我有 32 个机器线程和 1 个ConcurrentHashMap
  • 如何在canvas元素中使用html内容

    任何人都可以告诉我如何将我的 html 内容放在画布上 如果我们能做到这一点 这些元素的属性和事件是否有效 并且我还在该画布上绘制了动画 From MDN 上的这篇文章 您不能只将 HTML 绘制到画布中 相反 您需要使用 包含要渲染的内容
  • 如何在 webgl 中使用帧缓冲区?

    我一直在尝试了解 WebGL OpenGL ES 中的帧缓冲区 我知道我们可以使用帧缓冲区混合多个纹理 因此 为了理解我通过采用 1 1 纹理编写了一个示例 并尝试在其之上应用帧缓冲区逻辑 但是 没有成功 请参阅底部的片段 如果您单击 混合
  • Struts2将参数传递给不同webapp中的action

    我使用Struts 2 3 16 3 我希望 webapp 1 中的操作将参数传递给 webapp 2 中的操作 在 webapp 1 的 struts xml 中 我定义了以下结果
  • 子类化与子类化协议

    让我们从Class方法 class LoginCredentials var id String init userID String self id userID 那么我们将得到以下内容 class FacebookLoginCreden