首页 > 解决方案 > 我的框架没有导入 Typealias

问题描述

我想编写一个方便的框架,其中有一些函数和一些类型别名。

我将我的框架添加到项目中,并且功能已导入并且工作正常。然而问题是我正在尝试使用我在框架中声明的类型别名,而 XCode 给了我这个编译器错误“使用未声明的类型'Json”

我宣布所有内容都是公开的,包括类型别名

override func viewDidLoad() {
    super.viewDidLoad()
    print(DBCore.randomInt())
    print(DBCore.randomInt(upTo: 10))
    print(DBCore.randomString())
    var x : Json? // compiler error here "Use of undeclared type 'Json'"

}

框架代码:

import Foundation

public class DBCore{

    public static func randomString() ->String{
        return UUID().uuidString
    }

    public static func randomInt() -> Int{
        return Int(arc4random())
    }

    public static func randomInt(upTo upperBound : Int) -> Int{
        return Int(arc4random_uniform(UInt32(upperBound)))
    }
}

public typealias Json = [String : Any]
public typealias JsonArray = [Json]

标签: swiftxcode

解决方案


我的框架和外部项目遇到了同样的问题。常规修复(清理、派生数据和重新启动 xcode)对我也不起作用。

我发现在我的外部项目中已经有另一种类型使用了我想要的类型别名。由于您已将变量命名为 的通用名称Json,因此它可能会被系统JSONvar 或外部项目中的另一个 var 覆盖。

如果您觉得必须保留该名称,则可以通过显式调用框架中的 typealias 来专门引用它。

框架:

public typealias MyTypeAlias = ((Bool) -> Void)
public protocol MyDelegate {
    func myFunc(with fancyType: MyTypeAlias)
}

外部项目:

@import MyFramework

public class MyLocalDelegate: MyDelegate {
    func myFunc(with fancyType: MyFramework.MyTypeAlias) { ... }
}

推荐阅读