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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我只想从另一个文件中包含我的SWIFT类,比如它的测试

PrimeNumberModel.斯威夫特

import Foundation

class PrimeNumberModel { }

PrimeNumberModelTest

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

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

这两个快速文件都在同一个目录中。

提问于
用户回答回答于

我也有同样的问题XCTestCase文件,但不在常规项目文件中。

为了摆脱:

未解析标识符“PrimeNumberModel”的使用

我需要import测试文件中的基本模块。就我而言,我的目标叫做“我的项目”,我补充说import myproject全班同学都被认出来了。

用户回答回答于

更新SWIFT 2.x和3.x

现在不需要添加public测试的方法。在SWIFT 2上,只需添加@testable关键词。

PrimeNumberModelTest

import XCTest
@testable import MyProject

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

你的内部方法Internal

PrimeNumberModel.斯威夫特

import Foundation

class PrimeNumberModel {
   init() {
   }
}

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

SWIFT 1.x

这里有两个与SWIFT相关的概念(Xcode 6 Beta 6)。

  1. 不需要导入SWIFT类,但需要导入外部模块(目标)
  2. 默认访问控制SWIFT的级别是Internal access

考虑到测试在另一个目标上PrimeNumberModelTests.swift你需要import包含要测试的类的目标,如果被称为MyProject将需要添加import MyProjectPrimeNumberModelTests:

PrimeNumberModelTest

import XCTest
import MyProject

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

但这还不足以测试你的班级。PrimeNumberModel,因为默认的访问控制级别是Internal Access,类在测试包中是不可见的,因此需要将它Public Access以及测试的所有方法:

PrimeNumberModel.斯威夫特

import Foundation

public class PrimeNumberModel {
   public init() {
   }
}

扫码关注云+社区