Ios 如何在swift中从另一个文件导入函数

Ios 如何在swift中从另一个文件导入函数,ios,swift,Ios,Swift,我被要求用swift进行测试,但我对swift一无所知 所以,我只是回顾一下代码,并试图从中找到意义 我在一个文件sayxyzTests.swift中编写了所有测试用例 通过检查用代码编写的测试用例,第一件事情是这样的 func xyz() { var failureMessage: String? = nil; startSess(validity: 3) } 在Javascript中,只有在 在同一个文件中的任何位置都声明了一个函数 如果我们从某处进口的话

我被要求用swift进行测试,但我对swift一无所知

所以,我只是回顾一下代码,并试图从中找到意义

我在一个文件say
xyzTests.swift
中编写了所有测试用例

通过检查用代码编写的测试用例,第一件事情是这样的

func xyz() {
        var failureMessage: String? = nil;
        startSess(validity: 3)
}
在Javascript中,只有在

  • 在同一个文件中的任何位置都声明了一个函数
  • 如果我们从某处进口的话
  • 因此,我在我的文件中搜索了
    startSess
    中的函数声明,但没有找到它。然后我点击了跳转到定义,找到了另一个名为
    utils.swift的文件

    internal func startSess(validity: Int = 1) {
    }
    
    我检查了文件是否至少有一个导入的引用,至少有一个util,但找不到任何引用

    这些是我代码中的所有导入语句

    import Foundation
    
    @testable import session
    

    有人能给我解释一下如何使用startSess吗

    我认为
    startSess
    是一个在任何类之外的函数,因为它是以这种方式调用的


    @testable import session
    所做的是导入整个工作区,以便从测试类访问。如果查看测试文件的右侧选项卡,可以看到目标成员资格仅为测试选择(应该是这样)。因此,如果没有
    @testable import

    请参见,有多种不同的方法可以从另一个文件调用函数,其中一些方法如下所示 (请原谅,如果我在回答中留下了任何方法,我可以编辑:)

  • 正如@Vollan所说,导入整个工作区,这样您就可以从项目中任何位置的任何文件访问任何函数
  • 调用或加载文件(在您的情况下为
    util.swift
    ),并在另一个文件中使用该函数(
    xyz.swift
    ) 例如:在
    xyz.swift

    func xyz() {
        let a = util() //Loading the swiftfile
        a.startSess(validity: 3) //using the function of swiftfile
    }
    
  • 使您想要使用的函数成为全局函数

    extension UIViewController { //In most cases UIViewController is used in all files so extending it helps
        func startSess(validity: Int = 1) {
        }
    }
    
  • 通过使用
    Foundation
    ,您可以直接将该函数设置为全局函数,即使您没有使用任何扩展名或任何类(与任何文件一样,
    Foundation
    必须导入任何
    SwiftFile
    标题中)

  • 例:-将任何
    swift文件
    命名为abc.swift
    并放在该文件中

    import Foundation
    func startSess(validity: Int = 1) {
        //Your Code
    }
    

    -现在,您可以在整个项目的任何文件中通过
    startSess(param)
    调用此函数。

    因此,函数
    xyz()
    startSess
    在不同的Swift文件中对吗???@NayanDave Yap。有一个父根文件夹
    tests
    。测试包含一个文件
    xyzTests.swift
    utils.swift
    utils.swift
    包含在函数
    xyz
    中调用的
    startSess
    ,该函数位于
    xyzTests.swift
    中。好的,所以您只想知道
    如何从另一个文件调用函数
    ,对吗?@NayanDave-Yap。这是正确的。这不是一个适合基础语言培训的网站,你需要自己拿起一本书来学习基础知识。是一本优秀的在线书籍。Vollan,在右边的选项卡中,在tag inspector下,我看到目标成员资格是文件夹
    tests
    。这是根文件夹,因此我可以在文件夹
    tests
    中的所有文件中使用
    startSess
    。另外,如果我在另一个文件中创建一个名为
    startSess
    的函数,会发生什么?它会引发错误吗?如果您在某个文件中创建了同名函数,那么在仅调用该文件时,您需要使用“self.startSess(param)”,您只是使用“startSess(param)”吗`然后,它不会显示错误,但您不会得到所需的输出,这看起来很奇怪,所以假设有两个文件
    util1.xyz
    util2.xyz
    ,它们都有函数
    startSess
    ,所以如果我在
    xyzTests.swift
    函数中调用
    startSess
    。它不会抛出错误并且可以执行其中任何一个?它不应该至少警告您这一点吗?不,当您开始编写
    startSess
    来调用时,它会要求您在两个不同文件中的两个可用函数之间进行选择,所以你已经知道你在呼叫哪个
    startSess
    了…这就是为什么它没有显示错误给我你的然后相当确定如果你没有通过导入来访问工作区,你不能使用工作区的类或扩展?我已经编辑了我的答案,希望它现在更正确:)它仍然只能在它的目标成员身份中访问。这样看:测试成员身份是您的项目,startSess函数在Alamofire中。不能在Alamofire中调用函数,除非实际导入Alamofire。因此,您必须导入主工作区。您所说的是正确的。如果他的目标是随机调用同一目标成员中的另一个函数。问题的标题是什么。但在他的描述中,这是测试和现场环境之间的函数调用。谢谢@Vollan,你知道的更多,因为你是资深的,我真的很感激,但这就是为什么我在回答之前在评论中问他是否只想知道
    如何从另一个文件调用函数
    ,他同意了……然后我相应地回答了
    文件
    标准……)