Есть ли способ найти актуальную документацию по API SwiftUI (а не только документацию для разработчиков)? - PullRequest
1 голос
/ 10 июня 2019

В настоящее время я смотрю видео SwiftUI Essentials с WWDC 2019, и докладчик поднял фактический API для VStack, который (невероятно, по крайней мере для меня) подробно описывает, как эта конкретная структура на самом деле работает.

Есть ли место для разработчиков, где можно найти такую ​​подробную, подробную документацию о конкретных функциях, предоставляемых Apple?

У Мэтта Стивенса есть замечательный APIdiff (http://codeworkshop.net/objc-diff/sdkdiffs/) сайт, который он предоставляет, но он все ссылается на стандартные страницы документации Apple для разработчиков.

Пример кода, предоставленного докладчиком:

public struct VStack<Content : View> : View {
     public init(
          alignment: HorizontalAlignment = .center,
          spacing: Length? = nil,
          @ViewBuilder content: () -> Content
     )
}

Фактически предоставленный код документации:

struct VStack<Content> where Content : View

Вышеуказанные особенности, касающиеся значений по умолчанию для выравнивания и одной только длины интервала, хотя и являются очень простыми, уже задаются в качестве отдельных вопросов SO по всему сайту в отношении того, что и почему поведение по умолчанию является тем, чем оно является.

Полагаю, что я спрашиваю, например, для текущих, более устоявшихся классов в UIKit, есть ли способ увидеть фактические детали реализации самого класса, такие как отображенные в этом WWDC для стека SwiftUI VStack? Я не уверен, является ли это информацией, которую Apple просто никогда не выдает, и это то, что люди узнали со временем (это действует определенным образом «просто потому, что», и мы знаем это по опыту), или это только тот факт, что SwiftUI является новым, и у Apple еще не было времени, чтобы укрепить SwiftUI и документацию.

Извините, если это было задано, или если это супер очевидный вопрос, я все еще довольно новичок в разработке программного обеспечения в целом.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 10 июня 2019

То, что вы показали из этой презентации, не является деталью реализации.Это публичный init метод VStack.Обратите внимание, что у него нет тела метода - это не реализация метода init, а только сигнатура его типа.

Вы можете найти ту же информацию, связанную с документацией VStack под целью «Создание стека».Вот страница документации для этого init метода .

Вы также можете увидеть подписи методов, подобные этой, с комментариями к документу, если они есть, в Xcode.

InXcode 11, выберите «Файл»> «Быстро открыть» в строке меню (ярлык по умолчанию: ⇧⌘O ).Введите «swiftui» на панели быстрого доступа:

open quickly bar with swiftui

Откройте «SwiftUI.h».Это ничего не говорит:

// Copyright © 2015 Apple Inc. All rights reserved.

#import <AppKit/AppKit.h>

Теперь щелкните значок «Связанные элементы» в верхнем левом углу редактора и выберите «Сгенерированный интерфейс»> «SwiftUI» в меню:

SwiftUI under Related Items menu

Затем нажмите «Без выбора» справа от «SwiftUI» в панели перехода в верхней части редактора и введите «vstack», когда открыто меню перехода:

finding vstack in the jump menu

XCode переходит к определению struct VStack:

/// A view that arranges its children in a vertical line.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct VStack<Content> where Content : View {

    /// Creates an instance with the given `spacing` and Y axis `alignment`.
    ///
    /// - Parameters:
    ///     - alignment: the guide that will have the same horizontal screen
    ///       coordinate for all children.
    ///     - spacing: the distance between adjacent children, or nil if the
    ///       stack should choose a default distance for each pair of children.
    @inlinable public init(alignment: HorizontalAlignment = .center, spacing: Length? = nil, content: () -> Content)

    /// The type of view representing the body of this view.
    ///
    /// When you create a custom view, Swift infers this type from your
    /// implementation of the required `body` property.
    public typealias Body = Never
}

К сожалению, это (обобщенное) объявление пропускает @ViewBuilderатрибут в аргументе content.Это упущение, вероятно, является ошибкой.

В дополнение к пропущенным аннотациям, сгенерированный интерфейс Swift также пропускает типы, методы и свойства, которые начинаются с _.(Он пропускает их, потому что они считаются деталями реализации, которые по любой причине должны быть обнародованы.) Например, обратите внимание, что сгенерированный интерфейс VStack также не упоминает, что VStack соответствует View.( Справочная документация также не упоминает об этом.)

Причина, по которой сгенерированный интерфейс и справочная документация не говорят нам VStack соответствует View, заключается в том, чтоVStack не соответствует непосредственно View.VStack соответствует _UnaryView, а _UnaryView является подпротоколом View.

Вы можете увидеть настоящий, честный для публики интерфейс VStack - то, что на самом деле использует компиляторкогда ваш исходный код импортирует SwiftUI - путем отслеживания файла .swiftinterface для модуля.Вы можете найти его по этому пути относительно вашего Xcode.app:

Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS.sdk / System / Library / Frameworks / SwiftUI.framework / Modules / SwiftUI.swiftmodule / arm64.swiftinterface

(Итак, поместите /Applications/Xcode-beta.app/ в начало этого пути, если вы не переименовали бета-версию Xcode 11 и поместите ее в /Applications).

Если вы выполните поиск этого файла по struct VStack, вы найдете настоящий открытый интерфейс VStack:

@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
@_fixed_layout public struct VStack<Content> : _UnaryView where Content : SwiftUI.View {
  @usableFromInline
  internal var _tree: _VariadicView.Tree<_VStackLayout, Content>
  @inlinable public init(alignment: HorizontalAlignment = .center, spacing: Length? = nil, @SwiftUI.ViewBuilder content: () -> Content) {
        _tree = .init(
            root: _VStackLayout(alignment: alignment, spacing: spacing), content: content())
    }
  public static func _makeView(view: _GraphValue<VStack>, inputs: _ViewInputs) -> _ViewOutputs
  public static func _makeViewList(view: _GraphValue<VStack>, inputs: _ViewListInputs) -> _ViewListOutputs
  public typealias Body = Swift.Never
}

Обратите внимание, что файл .swiftinterface не консолидируетсярасширения.VStack не имеет никаких расширений, но (например) Color имеет, поэтому, если вы хотите увидеть истинный общедоступный интерфейс Color, вам нужно искать как struct Color, так и extension Color.

1 голос
/ 10 июня 2019

В настоящее время документация по SwiftUI довольно скудна. Но я думаю, что он будет расти и совершенствоваться из официальных и вспомогательных источников.

Вот основные ресурсы, из которых я сейчас ухожу:

Вы также можете просматривать документы из бета-версии Xcode 11.0 shift+command 0 и просматривать раскрывающийся список SwiftUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...