Создание библиотеки
Исходный код этого руководства можно найти на GitHub
Установка Swift
Чтобы начать работу, установите Swift, чтобы начать использовать его на macOS, Linux или Windows.
Подсказка: чтобы проверить, что Swift установлен, выполните
swift --versionиз вашего оболочки или приложения терминала.
Swift поставляется с Swift Package Manager (SwiftPM), который управляет распространением кода Swift. Он позволяет легко импортировать другие Swift пакеты в ваши приложения и библиотеки, что делает его ценным инструментом для любого разработчика Swift.
Swift регулируется Apache License, Version 2.0.
Инициализация
Давайте напишем небольшую библиотеку с нашей новой средой разработки Swift. Для начала мы будем использовать SwiftPM, чтобы создать для нас новый проект. В вашем терминале выполните:
$ mkdir MyLibrary
$ cd MyLibrary
$ swift package init --name MyLibrary --type library
Это создаст новую директорию под названием MyLibrary с следующими файлами:
.
├── Package.swift
├── Sources
│ └── MyLibrary
│ └── MyLibrary.swift
└── Tests
└── MyLibraryTests
└── MyLibraryTests.swift
Package.swift — это файл манифеста для Swift. Именно здесь вы храните метаданные для своего проекта, а также его зависимости.
Sources/MyLibrary/MyLibrary.swift — это начальный исходный файл библиотеки, где мы будем писать код нашей библиотеки. Test/MyLibraryTests/MyLibraryTests.swift — это место, где мы можем написать тесты для нашей библиотеки.
Фактически, SwiftPM сгенерировал проект «Hello, world!», включая некоторые модульные тесты! Мы можем запустить тесты, выполнив swift test в нашем терминале.
$ swift test
Building for debugging...
[5/5] Linking MyLibraryPackageTests
Build complete! (7.91s)
Test Suite 'All tests' started at 2023-08-29 18:59:31.328
Test Suite 'MyLibraryPackageTests.xctest' started at 2023-08-29 18:59:31.329
Test Suite 'MyLibraryTests' started at 2023-08-29 18:59:31.329
Test Case '-[MyLibraryTests.MyLibraryTests testExample]' started.
Test Case '-[MyLibraryTests.MyLibraryTests testExample]' passed (0.001 seconds).
Test Suite 'MyLibraryTests' passed at 2023-08-29 18:59:31.330.
Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'MyLibraryPackageTests.xctest' passed at 2023-08-29 18:59:31.330.
Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'All tests' passed at 2023-08-29 18:59:31.330.
Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.002) seconds
Небольшая библиотека
Теперь давайте напишем небольшую библиотеку. Замените примерный контент MyLibrary.swift следующим кодом:
import Foundation
struct Email: CustomStringConvertible {
var description: String
public init(_ emailString: String) throws {
let regex = #"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}"#
guard let _ = emailString.range(of: regex, options: .regularExpression) else {
throw InvalidEmailError(email: emailString)
}
self.description = emailString
}
}
private struct InvalidEmailError: Error {
let email: String
}
Теперь давайте добавим модульный тест для этой строго типизированной API электронной почты. Замените примерный контент MyLibraryTests.swift следующим кодом:
@testable import MyLibrary
import XCTest
final class MyLibraryTests: XCTestCase {
func testEmail() throws {
let email = try Email("john.appleseed@apple.com")
XCTAssertEqual(email.description, "john.appleseed@apple.com")
XCTAssertThrowsError(try Email("invalid"))
}
}
После сохранения мы можем снова запустить тесты:
❯ swift test
Building for debugging...
[5/5] Linking MyLibraryPackageTests
Build complete! (3.09s)
Test Suite 'All tests' started at 2023-08-29 19:01:08.640
Test Suite 'MyLibraryPackageTests.xctest' started at 2023-08-29 19:01:08.641
Test Suite 'MyLibraryTests' started at 2023-08-29 19:01:08.641
Test Case '-[MyLibraryTests.MyLibraryTests testEmail]' started.
Test Case '-[MyLibraryTests.MyLibraryTests testEmail]' passed (0.002 seconds).
Test Suite 'MyLibraryTests' passed at 2023-08-29 19:01:08.643.
Executed 1 test, with 0 failures (0 unexpected) in 0.002 (0.002) seconds
Test Suite 'MyLibraryPackageTests.xctest' passed at 2023-08-29 19:01:08.643.
Executed 1 test, with 0 failures (0 unexpected) in 0.002 (0.002) seconds
Test Suite 'All tests' passed at 2023-08-29 19:01:08.643.
Executed 1 test, with 0 failures (0 unexpected) in 0.002 (0.003) seconds
Исходный код этого руководства можно найти на GitHub
The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.
Documentation for Swift 6.0.3
https://www.swift.org/getting-started/library-swiftpm