使用蒸汽时 Timer.scheduledTimer 不可用?

Posted

技术标签:

【中文标题】使用蒸汽时 Timer.scheduledTimer 不可用?【英文标题】:Timer.scheduledTimer no available when using vapor? 【发布时间】:2018-05-23 02:54:26 【问题描述】:

我在使用 vapor+Xcode 编译时遇到了这个编译问题:

以下是一些相关信息:

$ vapor --version
Vapor Toolbox: 3.1.7
Vapor Framework: 3.0.1

$ swift --version
Apple Swift version 4.1 (swiftlang-902.0.48 clang-902.0.37.1)
Target: x86_64-apple-darwin17.6.0

根据the status 应该没问题。有什么想法吗?

【问题讨论】:

代码是在 Linux 上运行还是在 Mac 上运行? swift-corelibs-foundation 仅用于非 Apple 平台。 我用的是Vapor,一个swift的服务端包,虽然代码是在Mac上用Xcode编译的,但是应该没问题,因为Vapor是跨平台的,可以在Mac上开发,在 Linux 上部署 【参考方案1】:

在 MacOS 上,无法构建

$ swift --version
Apple Swift version 4.1 (swiftlang-902.0.48 clang-902.0.37.1)
Target: x86_64-apple-darwin17.5.0

$ mkdir MyExec
$ cd MyExec

$ swift package init --type executable
$ swift package update

$ vim Sources/MyExec/main.swift
import Foundation
import CoreFoundation

let timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true)  timer in
    print("\(timer)")

print("\(timer)")

CFRunLoopRun()

$ swift build

Compile Swift Module 'MyExec' (1 sources)
/path/MyExec/Sources/MyExec/main.swift:4:19: error: 'scheduledTimer(withTimeInterval:repeats:block:)' is only available on OS X 10.12 or newer
let timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true)  timer in
                  ^
/path/MyExec/Sources/MyExec/main.swift:4:19: note: add 'if #available' version check
let timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true)  timer in
                  ^
error: terminated(1): /Library/Developer/CommandLineTools/usr/bin/swift-build-tool -f /path/MyExec/.build/debug.yaml main output:

在 Ubuntu 上工作

$ swift --version
Swift version 4.1 (swift-4.1-RELEASE)
Target: x86_64-unknown-linux-gnu

$ mkdir MyExec
$ cd MyExec

$ swift package init --type executable
$ swift package update

$ vim Sources/MyExec/main.swift
import Foundation
import CoreFoundation

let timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true)  timer in
    print("\(timer)")

print("\(timer)")

CFRunLoopRun()

$ swift build

$ .build/x86_64-unknown-linux/debug/MyExec

<Timer: 0x000055aeb1cf6790>
<Timer: 0x000055aeb1cf6790>
<Timer: 0x000055aeb1cf6790>

【讨论】:

以上是关于使用蒸汽时 Timer.scheduledTimer 不可用?的主要内容,如果未能解决你的问题,请参考以下文章

WCF 在压缩时返回空蒸汽

蒸汽构建命令不适用于 Swift 3.0

蒸汽平台要来了!Steam转区教程公开!

将域指向在 OS X 服务器上运行的 Web 应用程序(例如 Kitura、完美、蒸汽服务器)

Python ML实战-工业蒸汽量预测01-赛题理解

禁用蒸汽覆盖