IGListKit/Source/IGListStackedSectionController.h
Robert Payne 40625f8ff9 Swift name annotations
Summary:
This adds `NS_SWIFT_NAME` annotations to all public API's to provide cleaner integration into Swift:

- Removes the need to prefix classes in Swift code, instead rely on Swift module name spacing
- Adds more argument labels to C function API's like `IGListDiff([], [], .equality)` => `ListDiff(oldArray: [], newArray: [], option: .equality)`

While this is a large API change it should be as easy as:

- Find and replace `(IGList)([^K])` to `List$2` in Xcode with a scope set to Swift
- Build and follow compiler's auto fix corrections for C API's or any missed renames

I have not updated the documentation to reflect this yet, I am totally willing to do so but before I sink that amount of time into it I wanted to see if the Instagram team is even open to this change!

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
- [ ] I have updated the documentation
Closes https://github.com/Instagram/IGListKit/pull/593

Reviewed By: jessesquires

Differential Revision: D5028039

Pulled By: rnystrom

fbshipit-source-id: b473d874a1f9574e56b2ebaabd5b73d1b57d4bab
2017-05-09 14:31:28 -07:00

53 lines
1.8 KiB
Objective-C

/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <IGListKit/IGListSectionController.h>
#import <IGListKit/IGListMacros.h>
NS_ASSUME_NONNULL_BEGIN
/**
An instance of `IGListStackedSectionController` is a clustered section controller, composed of many child section
controllers. It constructs and routes item-level indexes to the appropriate child section controller with a local
index. This lets you build section controllers made up of individual units that can be shared and reused with other
section controllers.
For example, you can create a "Comments" section controller that displays lists of text that is used alongside photo,
video, or slideshow section controllers. You then have four small and manageable section controllers instead of one
huge class.
*/
IGLK_SUBCLASSING_RESTRICTED
NS_SWIFT_NAME(ListStackedSectionController)
@interface IGListStackedSectionController : IGListSectionController
/**
Creates a new stacked section controller.
@param sectionControllers An array of section controllers that make up the stack.
@note The order of the section controllers dictates the order in which they appear.
@warning The first section controller that is the supplementary source decides which supplementary views get displayed.
*/
- (instancetype)initWithSectionControllers:(NSArray <IGListSectionController *> *)sectionControllers NS_DESIGNATED_INITIALIZER;
/**
:nodoc:
*/
- (instancetype)init NS_UNAVAILABLE;
/**
:nodoc:
*/
+ (instancetype)new NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END