如何从另一个Swift文件导入Swift文件?

 doliangzhe 发布于 2023-01-11 18:32

我只是想从其他文件中包含我的Swift类,比如它的测试

PrimeNumberModel.swift

import Foundation

class PrimeNumberModel { }

PrimeNumberModelTests.swift

import XCTest
import PrimeNumberModel  // gives me "No such module 'PrimeNumberModel'"

class PrimeNumberModelTests: XCTestCase {
    let testObject = PrimeNumberModel()  // "Use of unresolved identifier 'PrimeNumberModel'"    
}

两个swift文件都在同一目录中.

7 个回答
  • 检查测试目标中PrimeNumberModel.swift的目标成员身份.

    2023-01-11 18:33 回答
  • 我有同样的问题,也在我的XCTestCase文件中,但不是在常规项目文件中.

    摆脱:

    使用未解析的标识符'PrimeNumberModel'

    我需要import测试文件中的基本模块.在我的情况下,我的目标被称为'myproject'并且我添加了import myproject并且该类被识别.

    2023-01-11 18:33 回答
  • 在Objective-C中,如果你想在另一个文件中使用一个类,你必须导入它:

    #import "SomeClass.h"
    

    但是,在Swift中,您根本不需要导入.只需使用它就像它已经导入一样.

    // This is a file named SomeClass.swift
    
    class SomeClass : NSObject {
    
    }
    
    // This is a different file, named OtherClass.swift
    
    class OtherClass : NSObject {
        let object = SomeClass()
    }
    

    如您所见,不需要导入.希望这可以帮助.

    2023-01-11 18:34 回答
  • 更新Swift 2.x和3.x.

    现在您不需要public将方法添加到测试中.在Swift 2上,只需要添加@testable关键字.

    PrimeNumberModelTests.swift

    import XCTest
    @testable import MyProject
    
    class PrimeNumberModelTests: XCTestCase {
        let testObject = PrimeNumberModel()
    }
    

    而你的内部方法可以保留 Internal

    PrimeNumberModel.swift

    import Foundation
    
    class PrimeNumberModel {
       init() {
       }
    }
    

    请注意,即使使用private(和fileprivate)符号也不可用@testable.


    Swift 1.x

    Swift有两个相关概念(如Xcode 6 beta 6).

      您不需要导入Swift类,但需要导入外部模块(目标)

      Swift中的默认访问控制级别是Internal access

    考虑到测试是在另一个目标上,PrimeNumberModelTests.swift您需要import包含要测试的类的目标,如果调用目标,MyProject需要添加import MyProjectPrimeNumberModelTests:

    PrimeNumberModelTests.swift

    import XCTest
    import MyProject
    
    class PrimeNumberModelTests: XCTestCase {
        let testObject = PrimeNumberModel()
    }
    

    但是,这是不够的,测试类PrimeNumberModel,因为默认访问控制水平Internal Access,你的类不会对测试束可见的,所以你需要使它Public Access和所有要测试的方法:

    PrimeNumberModel.swift

    import Foundation
    
    public class PrimeNumberModel {
       public init() {
       }
    }
    

    2023-01-11 18:34 回答
  • 我能够通过清理我的构建来解决这个问题.

    顶部菜单 - >产品 - >清洁或键盘快捷键:Shift+ Cmd+K

    2023-01-11 18:34 回答
  • 根据Apple,您不需要在同一目标中导入swift文件.我终于通过将我的swift文件添加到我的常规目标和测试目标来实现它.然后我使用桥接头进行测试,以确保我在常规桥接头中引用的ObjC文件可用.现在就像魅力一样.

    import XCTest
    //Optionally you can import the whole Objc Module by doing #import ModuleName
    
    class HHASettings_Tests: XCTestCase {
    
    override func setUp() {
        let x : SettingsTableViewController = SettingsTableViewController()
    
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }
    
    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }
    
    func testExample() {
        // This is an example of a functional test case.
        XCTAssert(true, "Pass")
    }
    
    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measureBlock() {
            // Put the code you want to measure the time of here.
        }
    }
    
    }
    

    因此,请确保PrimeNumberModel具有测试目标的目标.或High6导入整个模块的解决方案将起作用

    2023-01-11 18:35 回答
  • 它在文档中说Swift中没有import语句.

    在此输入图像描述

    只需使用:

    let primNumber = PrimeNumberModel()
    

    2023-01-11 18:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有