小编tad*_*ija的帖子

Swift框架中适当的命名空间(或类命名)约定(适用于iOS)

TLDR

  1. 如果框架被称为AEConicalGradient,那么它的类应该被称为ConicalGradientLayerConicalGradientView还是仅仅是LayerView

  2. 如果框架被称为AELog,并且它的类也称为AELog,而其他类称为Line,并且使用此Line类型的一些委托回调,如果您的代码也定义了名为Line的类型,则如何实现此委托,因为将框架名称添加为方法签名中的前缀func didLog(line: AELog.Line)会产生错误'Line' is not a member type of 'AELog',实际上它不是(它是AELog框架的一部分,但它不是AELog类的成员).

阅读更多

在为Swift 3更新我的几个框架的同时,我对框架类的正确命名约定有了很多想法,这取决于框架名称本身.

最后我意识到我并没有在不同的框架中使用相同的约定,所以现在我不喜欢这种缺乏一致性.

我将直接跳到我遇到的一些现实世界的例子中:

1.示例:Framework没有名为框架名称的类:

框架名为AEConicalGradient,它由2个公共类组成:

  • CALayer子类
  • UIView子类

每个类的名称应该是什么?

a)AEConicalGradientLayerAEConicalGradientView

b)ConicalGradientLayerConicalGradientView

c)图层视图

讨论:

a)我在第一个框架版本中使用了这个,在单个AEConicalGradient.swift文件中使用这两个类.我不再喜欢这种方法,我将源分成多个文件,所以现在我在b)c)方法之间进行思考.

b)在这种方法中,我喜欢这样一个事实:有人可以将这些文件拖到项目中(例如,不使用任何依赖管理器)或复制/粘贴代码,并且它不会过多地放松上下文(因为名称清晰),但是另一方面,如果您将其视为AEConicalGradient.ConicalGradientLayerAEConicalGradient.ConicalGradientView,它听起来有点重复.

c) …

frameworks coding-style swift swift3

13
推荐指数
1
解决办法
2848
查看次数

使用Swift 4嵌套的Codable协议

我正在使用Swift 4和Codable一点点,并且遇到了一些具有嵌套协议的场景,这些协议都符合Codable.

简化示例如下所示:

protocol CodableSomething: Codable {}

protocol CodableAnotherThing: Codable {
    var something: CodableSomething { get }
}

struct Model: CodableAnotherThing {
    var something: CodableSomething
}
Run Code Online (Sandbox Code Playgroud)

此代码使用Xcode 9 Beta 5进行构建错误:

  • 类型'模型'不符合协议'可解码'
  • 类型'模型'不符合协议'可编码'

现在,我没想到这些错误,因为我理解编译器会自动生成对这些协议的一致性,实际上,我甚至无法在没有构建错误的情况下手动实现此一致性.我也尝试了几种不同的方法来解决这种嵌套模型结构的使用,Codable但我无法使其工作.

我的问题:这是一个编译器错误(它仍然是测试版)或者我做错了什么?

swift4 xcode9 codable

7
推荐指数
1
解决办法
1785
查看次数

从 Xcode Canvas 中的 SwiftUI 实时预览导出图像

在撰写本文时,Xcode 中还没有将 Canvas 中的实时预览导出为 PNG 图像的选项(这对于创建 App Store 屏幕截图非常有用)。

我不确定这在幕后是如何工作的,但我猜 Xcode Canvas 中也使用常规模拟器进行实时预览。由于可以从模拟器“保存屏幕”,我想知道是否有办法在 Xcode 画布中的实时预览中执行相同操作?

我能否以某种方式访问​​这些“预览模拟器”(即通过simctl工具)或磁盘上的 Xcode 渲染缓存,或者在 Apple 将此选项集成到 Xcode 之前是否有任何其他“hacky”方法来实现此目的(我认为这只是一个问题)时间)。

xcode live-preview swiftui

6
推荐指数
1
解决办法
365
查看次数