Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 从编译后的代码中找到Swift中的源项目目录_Xcode_Swift - Fatal编程技术网

Xcode 从编译后的代码中找到Swift中的源项目目录

Xcode 从编译后的代码中找到Swift中的源项目目录,xcode,swift,Xcode,Swift,我想在我自己的swift项目中找到我未编译的源代码的目录(因为我想计算它的行数) let projectRepo = "/Users/tombrown/Workspace/SwiftGolf" // <-- I want this programmatically let path = "\(projectRepo)/SwiftGolf/Golf.swift" var fileContents = String.stringWithContentsOfFile(path, encodin

我想在我自己的swift项目中找到我未编译的源代码的目录(因为我想计算它的行数)

let projectRepo = "/Users/tombrown/Workspace/SwiftGolf" // <-- I want this programmatically
let path = "\(projectRepo)/SwiftGolf/Golf.swift"

var fileContents = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil)

let projectRepo=“/Users/tombrown/Workspace/SwiftGolf”//由于将源文件添加到
构建阶段>复制捆绑资源
不起作用,为了获得更大的灵活性,我建议使用一点Objective-C

在项目的
生成设置中添加以下行:

然后,如果您的项目已经有一个桥接头,const将从Swift自动变为可用

do {
    let path = "\(PROJECT_DIR)/Test/ViewController.swift"
    let source = try String(contentsOfFile: path)
    print(source)
} catch {
    print("Error handling goes here")
}
如果项目没有桥接头,那么可以通过向项目中添加新的Objective-C类来让Xcode添加桥接头,然后Xcode将询问桥接头

编辑:

当然,也可以手动添加桥接头,方法是向项目添加一个新的头文件,然后在项目的构建设置中设置其到“Objective-C桥接头”的路径

通常情况下,项目_DIR宏不会自动用于Swift代码,在桥接标头中添加:

@import Foundation;

static const NSString *kProjectDir = PROJECT_DIR;
结束编辑


如果您对文件的只读访问没有问题,您可以使用Xcode将源文件复制到应用程序的资源文件夹中,方法是在图像上添加自定义脚本或
copy files
Build阶段:

那么文件的路径将是:

let path = NSBundle.mainBundle().pathForResource("ViewController", ofType: "swift")

挑战在于快速推断运行时与编译时的位置。xcode建议中的参数运行良好,可以作为解决方案。我不能使用这种方法,因为我使用的是没有xcode的SPM。另一种方法是使用这个库

在你的包裹里。斯威夫特

dependencies: [
          .Package(url: "https://github.com/JohnSundell/Files.git", Version(1,8,0))
    ]
然后在代码中

import Files
let projectRepo = "\(Folder.home.path)/gitWorkspace/SwiftGolf"
do {
 let model = try Data(contentsOf:URL(fileURLWithPath: "\(projectDir)/\(modelFile)"))

}catch {

   print("error: \(error)")

}
另一个选项是CommandLineKit/xcode参数

import CommandLineKit .  
let cmdLine = CommandLineKit.CommandLine() .    
let file = StringOption(shortFlag: "f",   
                    longFlag: "file",    
                    required: true,   
                    helpMessage: "The file you're trying to parse") .   
cmdLine.addOptions(file)


do {
    try cmdLine.parse()
    print(file.value!)   
} catch {
    print("error: \(error)")
    exit(-1)
}

我无法访问预处理器宏,即使使用桥接头@WiseNoEdit's true,有时常量在Swift代码中也无法自动使用。然后它可以显式地映射到桥接头中,如:
static const NSString*kProjectDir=PROJECT\u DIR