ibn*_*riq 7 swift swift-package-manager
我已按照建议使用 Swift Package Manager添加了甜菊。我已经将 Cocoapods 用于其他依赖项。
现在我有一个单独的 swift 文件,我在其中导入甜叶菊以在这样的扩展中使用
import UIKit
import Stevia
extension UIView {
func vHeight(_ points: CGFloat) {
self.height(points)
}
func vWidth(_ points: CGFloat) {
self.width(points)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是这使得甜叶菊在整个项目中可用。例如,如果我到达新的 ViewController 并且没有
进口甜叶菊
,我仍然可以访问它。我不想摆脱这种行为。是否可以?
不幸的是,由于已知的长期存在的编译器错误,这是不可能的:[SR-3908]扩展方法可见,无需在文件中导入模块(https://github.com/apple/swift/issues/46493)。
一旦您import Stevia在项目中添加了此模块(swift 包)中的所有公共扩展,就可以在整个模块(您的应用程序)中使用,就像您从UIView扩展中使用的函数一样:
// Stevia+Size.swift
public extension UIView {
...
@discardableResult
func height(_ points: CGFloat) -> Self {
height(Double(points))
}
...
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于类型!import如果没有在需要它们的每个文件中声明,则无法访问其他模块(swift 包)中的类型:
//import Stevia
let space = FlexibleSpace() // Error: Cannot find 'FlexibleSpace' in scope
Run Code Online (Sandbox Code Playgroud)
所以这就是错误的本质。
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |