IGListKit/Source/IGListAdapterDataSource.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

68 lines
2.3 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 <UIKit/UIKit.h>
#import <IGListKit/IGListDiffable.h>
@class IGListAdapter;
@class IGListSectionController;
NS_ASSUME_NONNULL_BEGIN
/**
Implement this protocol to provide data to an `IGListAdapter`.
*/
NS_SWIFT_NAME(ListAdapterDataSource)
@protocol IGListAdapterDataSource <NSObject>
/**
Asks the data source for the objects to display in the list.
@param listAdapter The list adapter requesting this information.
@return An array of objects for the list.
*/
- (NSArray<id <IGListDiffable>> *)objectsForListAdapter:(IGListAdapter *)listAdapter;
/**
Asks the data source for a section controller for the specified object in the list.
@param listAdapter The list adapter requesting this information.
@param object An object in the list.
@return A new section controller instance that can be displayed in the list.
@note New section controllers should be initialized here for objects when asked. You may pass any other data to
the section controller at this time.
Section controllers are initialized for all objects whenever the `IGListAdapter` is created, updated, or reloaded.
Section controllers are reused when objects are moved or updated. Maintaining the `-[IGListDiffable diffIdentifier]`
guarantees this.
*/
- (IGListSectionController *)listAdapter:(IGListAdapter *)listAdapter sectionControllerForObject:(id)object;
/**
Asks the data source for a view to use as the collection view background when the list is empty.
@param listAdapter The list adapter requesting this information.
@return A view to use as the collection view background, or `nil` if you don't want a background view.
@note This method is called every time the list adapter is updated. You are free to return new views every time,
but for performance reasons you may want to retain the view and return it here. The infra is only responsible for
adding the background view and maintaining its visibility.
*/
- (nullable UIView *)emptyViewForListAdapter:(IGListAdapter *)listAdapter;
@end
NS_ASSUME_NONNULL_END