Spec-Zone.ru › Swift

Создание библиотеки

Исходный код этого руководства можно найти на 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API