我有一个外部控制台应用程序(在OS X上),它发出一系列从1到100到标准输出的整数,大约每秒一次.
我Swift,我需要使用该数字流来更新进度指示器.
这是我到目前为止的代码:
class MasterViewController: NSViewController {
@IBOutlet weak var progressIndicator: NSProgressIndicator!
override func viewDidLoad() {
super.viewDidLoad()
let task = Process()
task.launchPath = "/bin/sh"
task.arguments = ["-c", "sleep 1; echo 10 ; sleep 1 ; echo 20 ; sleep 1 ; echo 30 ; sleep 1 ; echo 40; sleep 1; echo 50; sleep 1; echo 60; sleep 1"]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
if let string = String(data: data, encoding: String.Encoding.utf8) …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Swift 包管理器,版本为 Swift 5.7.1。我想用正则表达式编译代码。例如,main.swift
可以如下:
let message = "Hello, world"
print(message.replacing(/[aeiou]/, with: "[vowel]"))
Run Code Online (Sandbox Code Playgroud)
我目前对输出和编译不感兴趣。
如果我在 XCode 中创建一个项目,它就可以正常工作。但是,如果我在 Swift 包管理器(使用swift build
)中尝试它,它显然无法识别出这/[aeiou]/
是一个正则表达式文字。相反,我收到类似的消息'/' is not a prefix unary operator
。
有没有办法让它与 Swift 包管理器一起工作,或者它根本不支持?
我有一个程序等待一行标准输入,然后,在处理它(需要相当长的时间)后,会发出一个答案.程序将接受输入,直到输入流关闭.
我怎么能从D控制该程序?换句话说,我怎么可能
我尝试了以下代码,但毫不奇怪,它等待子进程完全完成,然后一次打印输出:
module main;
import std.file;
import std.path;
import std.process;
import std.stdio;
void main(string[] args)
{
string[] inputs = ["test string 1", "test string 2"];
auto pipes = pipeProcess(buildPath(getcwd(), "LittleTextProcessingApp"), Redirect.all);
scope(exit) wait(pipes.pid);
foreach(input; inputs)
{
pipes.stdin.writeln(input);
}
pipes.stdin.close;
foreach(line; pipes.stdout.byLine)
{
writeln(line);
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,它会在一秒钟的延迟后打印出来,
以下是500毫秒前输入的:测试字符串1
以下是500毫秒前输入的:测试字符串2
所需的行为是它打印
以下是500毫秒前输入的:测试字符串1
半秒后,第二行500毫秒后.
我作为子进程测试的程序的源代码如下:
module main;
import std.stdio;
import core.thread;
void main(string[] args)
{
foreach(input; stdin.byLine)
{
auto duration = 500.msecs;
stderr.writefln("Doing something for %s....", duration);
Thread.sleep(duration);
writefln("The …
Run Code Online (Sandbox Code Playgroud) 我有一个ac api,它返回一个以null结尾的字符串,它是一个类型的数组unsigned char*
(对应于UnsafePointer<UInt8>
).
Swift有初始化器String(validatingUTF8:)
,但参数必须是UnsafePointer<CChar>
(aka UnsafePointer<Int8>
),并且没有简单的方法来在两者之间进行转换.
如何从这个以null结尾的c-string转换为Swift字符串?
我想用 \xe2\x80\x9cshebang\xe2\x80\x9d 符号制作一个使用正则表达式文字的 Swift 脚本。例如:
\n#!/usr/bin/env swift\n\nlet message = "Hello, world"\nprint(message.replacing(/[aeiou]/, with: "[vowel]"))\n
Run Code Online (Sandbox Code Playgroud)\n在问题中,Swift 包管理器支持正则表达式吗?,我学习了如何使这段代码在 Swift 包管理器中工作。
\n它可以作为 Swift 脚本使用吗?或者我必须等待未来的更新吗?
\n