다른 Swift 파일에서 Swift 파일을 가져오려면 어떻게 해야 합니까?
테스트와 같은 다른 파일의 Swift 클래스를 포함하고 싶습니다.
소수 모델.swift
import Foundation
class PrimeNumberModel { }
소수 모형 검정.swift
import XCTest
import PrimeNumberModel // gives me "No such module 'PrimeNumberModel'"
class PrimeNumberModelTests: XCTestCase {
let testObject = PrimeNumberModel() // "Use of unresolved identifier 'PrimeNumberModel'"
}
두 swift 파일이 모두 동일한 디렉토리에 있습니다.
문제를. 제 ▁my▁in,다니▁i▁the▁had▁also▁problem.XCTestCase
파일은 있지만 일반 프로젝트 파일에는 없습니다.
다음을 제거하기
확인되지 않은 식별자 'PrimeNumberModel' 사용
할 필요가 있었습니다.import
테스트 파일의 기본 모듈입니다.저의 경우, 제 목표는 'my project'이고 저는 다음과 같이 덧붙였습니다.import myproject
그리고 그 수업은 인정받았습니다.
Update Swift 2.x, 3.x, 4.x 및 5.x
이추가필없다습니가요할제▁the를 추가할가 없습니다.public
테스트할 방법에 대해 설명합니다.최신 버전의 Swift에서는 키워드만 추가하면 됩니다.
소수 모형 검정.swift
import XCTest
@testable import MyProject
class PrimeNumberModelTests: XCTestCase {
let testObject = PrimeNumberModel()
}
인 방법은 고당내방법은인적부그리신을 유지할 수 .Internal
소수 모델.swift
import Foundation
class PrimeNumberModel {
init() {
}
}
:private
)fileprivate
할 수 .@testable
.
스위프트 1.x
여기에는 Swift의 두 가지 관련 개념(Xcode 6 베타 6)이 있습니다.
- Swift 클래스를 가져올 필요는 없지만 외부 모듈(대상)을 가져와야 합니다.
- Swift의 기본 액세스 제어 수준은 다음과 같습니다.
Internal access
테스트가 다른 대상에 있다는 점을 고려하면PrimeNumberModelTests.swift
할 필요가 있습니다.import
테스트할 클래스가 포함된 대상(대상이 호출된 경우)MyProject
를 추가해야 .import MyProject
에▁PrimeNumberModelTests
:
소수 모형 검정.swift
import XCTest
import MyProject
class PrimeNumberModelTests: XCTestCase {
let testObject = PrimeNumberModel()
}
하지만 이것은 당신의 수업을 시험하기에 충분하지 않습니다.PrimeNumberModel
은 " " " 입니다. " 입니다.Internal Access
번들에 것이기 을 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜPublic Access
테스트할 모든 방법:
소수 모델.swift
import Foundation
public class PrimeNumberModel {
public init() {
}
}
설명서에는 Swift에 Import 문이 없다고 나와 있습니다.
간단히 사용:
let primNumber = PrimeNumberModel()
테스트 대상에서 PrimeNumberModel.swift의 target-membership을 확인합니다.
Objective-C에서 다른 파일의 클래스를 사용하려면 클래스를 가져와야 합니다.
#import "SomeClass.h"
하지만 스위프트에서는 수입할 필요가 전혀 없습니다.이미 가져온 것처럼 사용하기만 하면 됩니다.
예
// This is a file named SomeClass.swift
class SomeClass : NSObject {
}
// This is a different file, named OtherClass.swift
class OtherClass : NSObject {
let object = SomeClass()
}
보시다시피, 수입이 필요하지 않았습니다.이게 도움이 되길 바랍니다.
Apple에 따르면 동일한 대상에 있는 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 솔루션이 작동합니다.
저는 제 빌드를 청소함으로써 이 문제를 해결할 수 있었습니다.
Top menu -> 상품 -> Clean Or 바로가기 : ++CmdK
Swift 2.0 기준 모범 사례는 다음과 같습니다.
을 합니다.@testable import MyApp
테스트 파일의 맨 위로 이동합니다. 여기서 "MyApp"은 앱 대상의 제품 모듈 이름입니다(앱 대상의 빌드 설정에서 볼 수 있음).바로 그겁니다.
앱 대상의 이름에 공백이 포함되어 있지 않으면 제품 모듈 이름이 앱 대상의 이름과 동일합니다. 공백은 밑줄로 대체됩니다.예를 들어, 만약 내 앱 대상이 "재미있는 게임"이라고 불렸다면 나는 쓸 것입니다.@testable import Fun_Game
제 테스트의 최고점에 있습니다.)
를 확인해 .PrimeNumberModelTests
대상 설정.
만약 당신이 볼 수 없다면.PrimeNumberModel.swift
파일Phases/Compile Sources
추가합니다.
컴파일러가 엔트리 포인트로 참조할 루틴을 추가해야 하므로 main.swift 파일을 추가합니다. 이 경우 테스트 파일의 인스턴스를 만듭니다.
본대의
PrimeNumberModelTests()
그런 다음 명령줄에서 컴파일합니다(El Capitan 및 Swift 2.2 사용).
xcrun -sdk macosx swiftc -emit-executable -o PrimeNumberMain PrimeNumberModel.swift PrimeNumberModelTests.swift main.swift
이 경우 이니셜라이저의 결과는 사용되지 않지만 프로그램이 컴파일되어 실행 가능하다는 경고가 표시됩니다.
./PrimeNumberMain
주의: XCTest 및 XCTest Case 가져오기 유형을 제거했습니다.
그래서, 당신은 할 필요합니다.
- 사용할 외부 모듈 가져오기
- 사용할 클래스 및 메서드에 대한 올바른 액세스 한정자가 있는지 확인합니다.
저의 경우 유닛 테스트를 하고 싶은 스위프트 파일이 있었고 유닛 테스트 파일도 스위프트 클래스였습니다.액세스 수식자가 올바른지 확인했지만 문이
import stMobile
(stMobile이 대상 이름이라고 가정해 보겠습니다.)
여전히 작동하지 않았습니다(아직 'No such module(해당 모듈 없음)' 오류가 발생했습니다). 대상을 확인했는데, 대상 이름이 실제로 stMobile이었습니다.그래서 포장 아래에 있는 빌드 설정으로 가서 제품 모듈 이름을 찾았는데, 어떤 이유에서인지 St_Mobile이라고 해서 가져오기 문을 변경했습니다.
import St_Mobile
(제품 모듈 이름) 및 모든 작업이 수행되었습니다.
요약하자면:
제품 모듈 이름을 확인하고 장치 테스트 클래스에서 아래의 가져오기 문을 사용합니다.
import myProductModuleName
액세스 한정자(클래스 수준 및 메서드)가 올바른지 확인합니다.
Swift 컴파일러는 명시적인 가져오기를 요구하는 대신 암시적으로 다음을 검색합니다..swiftmodule
Swift 라이브러리에 종속된 파일입니다.
Xcode는 당신을 위해 신속한 모듈을 구축할 수 있습니다. 또는 Railsware 블로그에서 명령 줄 지침을 참조하십시오.swiftc
.
@high6와 @erik-p-hansen이 @high6의 답변에서 지적했듯이, 이것은 PrimeNumberModel 클래스가 있는 모듈의 대상을 가져오면 극복할 수 있습니다. 이는 단순한 프로젝트의 프로젝트와 동일한 이름일 수 있습니다.
이것을 보는 동안 swiftcast.tv 에서 Clayton McIlrath의 Write your first Unit Test in Swift라는 기사를 보게 되었습니다.액세스 수정자에 대해 설명하고, 동일한 문제(모델 파일이 아닌 View 컨트롤러의 경우)의 예를 보여주며, 대상을 가져와서 대상에 대상 파일을 포함하여 액세스 수정자 문제를 해결하는 방법을 보여줍니다.테스트하려는 클래스를 공개할 필요가 없다는 뜻입니다. 실제로 공개하기를 원하지 않는 한.
언급URL : https://stackoverflow.com/questions/24029781/how-do-i-import-a-swift-file-from-another-swift-file
'itsource' 카테고리의 다른 글
C#에 값 목록을 만드는 빠른 방법은 무엇입니까? (0) | 2023.05.17 |
---|---|
명령줄에서 Xcode를 업데이트하는 방법 (0) | 2023.05.17 |
OAuth 2 클라이언트 ID 및 비밀을 생성하는 방법 (0) | 2023.05.17 |
Objective-C에서 내가 했던 것과 같은 방식으로 Swift에 자산을 저장하는 방법? (0) | 2023.05.17 |
Mac OS X에 Python 3을 설치했지만 여전히 Python 2.7입니다. (0) | 2023.05.17 |