BlueSignals 2.0.0

BlueSignals 2.0.0

Danny SungBill AbtSwift-at-IBM 维护。



  • IBM

APIDoc Build Status - Master macOS iOS Linux Apache 2 Slack Status

信号

通用跨平台信号处理器。

先决条件

Swift

  • Swift Open Source swift-4.0.0-RELEASE 工具链(对于最新版本最低要求
  • Swift Open Source swift-4.2-RELEASE 工具链(推荐
  • 包含在 Xcode 版本 10.0 (10A255) 或更高版本的 Xcode 中的 Swift 工具链。

macOS

  • macOS 10.11.6(El Capitan)或更高版本。
  • 使用上述工具链之一的 Xcode 版本 9.0 或更高版本。
  • 使用包含的工具链的 Xcode 版本 10.0(10A255)或更高版本(推荐)。

iOS

  • iOS 10.0 或更高版本
  • 使用上述工具链之一的 Xcode 版本 9.0 或更高版本。
  • 使用包含的工具链的 Xcode 版本 10.0(10A255)或更高版本(推荐)。

Linux

  • Ubuntu 16.04(或16.10,但仅在16.04上进行了测试)。
  • 上述Swift开源工具链之一。

构建

要从命令行构建Signals

% cd <path-to-clone>
% swift build

使用信号

包含在项目中

Swift包管理器

要将BlueSignals包含到Swift包管理器包中,将其添加到定义在您的Package.swift文件中的dependencies属性中。您可以使用majorVersionminor参数选择版本。例如

	dependencies: [
		.Package(url: "https://github.com/IBM-Swift/BlueSignals.git", majorVersion: <majorVersion>, minor: <minor>)
	]

Carthage

要使用Carthage在项目中包含BlueSignals,请向您的Cartfile中添加一行,包含GitHub组织、项目和版本名称。例如

	github "IBM-Swift/BlueSignals" ~> <majorVersion>.<minor>

CocoaPods

要在使用 CocoaPods 的项目中包含 BlueSignals,只需将 BlueSignals 添加到您的 Podfile 中,例如:

    platform :ios, '10.0'

    target 'MyApp' do
        use_frameworks!
        pod 'BlueSignals'
    end

开始之前

首先需要做的是导入 Signals 框架。这可以通过以下方式完成:

import Signals

提供的 API

Signals 提供了四个(4)类级别 API。其中三个(3)用于捕获和处理操作系统信号。另一个功能允许引发一个信号。

捕获信号

  • trap(signal signal: Signal, action: SigActionHandler) - 这个基本 API 允许你为特定信号设置特定的处理程序。

下面的例子展示了如何向服务器添加捕获处理程序,以便在用户按下 ^C 时执行有序关闭,这会将一个 SIGINT 发送给进程。

import Signals

...

let server: SomeServer = ...

Signals.trap(signal: .int) { signal in

	server.shutdownServer()
}

server.run()

此外,还有基于上述基本 API 构建的便捷 API,可以捕获多个信号,每个信号都有自己的处理程序或单个处理程序。

  • trap(signals signals: [(signal: Signal, action: SigActionHandler)]) - 这个允许你在单个函数调用中捕获多个信号到单独的处理程序。
  • trap(signals signals: [Signal], action: SigActionHandler) - 这个 API 允许你捕获多个信号到公共处理程序。

引发信号

  • raise(signal signal: Signal) - 此API用于向应用程序发送操作系统信号。

以下示例展示了如何使用信号机制向操作系统发送信号,此处为SIGABRT

import Signals

...

Signals.raise(signal: .abrt)

忽略信号

  • func ignore(signal: Signal) - 此API用于忽略操作系统信号。

以下示例展示了如何使用信号机制忽略操作系统信号,此处为SIGPIPE

import Signals

...

Signals.ignore(signal: .pipe)

恢复信号默认处理程序

  • func restore(signal: Signal) - 此API用于恢复操作系统信号的默认处理程序。

以下示例展示了如何使用信号机制恢复信号的默认处理程序,此处为SIGPIPE

import Signals

...

Signals.restore(signal: .pipe)

添加用户定义的信号

以下示例演示了如何添加用户定义的信号,为其添加一个陷阱处理程序,然后发送该信号。

import Signals

let mySignal = Signals.Signal.user(20)

Signals.trap(signal: mySignal) { signal in

	print("Received signal \(signal)")
}

Signals.raise(signal: mySignal)

以上代码片段的输出为:

Received signal 20

社区

我们喜欢讨论服务器端Swift和Kitura。加入我们的Slack群组,认识我们的团队!

许可证

此库受Apache 2.0许可证的许可。完整的许可证文本可在LICENSE中找到。