Latest 1.1.0
Homepage https://github.com/psartzetakis/JRTypedStrings
License MIT
Platforms ios 8.0, tvos 9.0, requires ARC

Version Status
Carthage compatible
Platform
license MIT

JRTypedStrings provides a convenience API that allows you to access UIViewControllers, UIViews, UITableViewCells and UICollectionViewCells in a type-safe way. It also eliminates the use of string identifiers when the identifier is the same as the class name.

About

Most of the times the identifier of a UITableViewCell for example matches the class name. The current API for accessing a UITableViewCell is quite cumbersome and it involves string identifiers which can easily introduce typos. Also we will have to implicitly cast to the required type and that can result to unsafe and hard to maintain codebase. This is where the JRTypedStrings comes to play, it provides a set of extensions which will help you write more elegant and type-safe code.

Requirements

  • iOS 8+
  • Swift 4.0
  • Xcode 9

Installation

CocoaPods

use_frameworks!

pod 'JRTypedStrings'

Carthage

github "psartzetakis/JRTypedStrings"

Getting Started

import JRTypedStrings

Examples

UITableViewCell

Before, you had to do the following:

override func viewDidLoad() {
    super.viewDidLoad()
    let nib = UINib(nibName: "CustomNibTableViewCell", bundle: nil)
    tableView.register(nib, forCellReuseIdentifier: "CustomNibTableViewCell")
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomNibTableViewCell", for: indexPath) as! CustomNibTableViewCell

    return cell
}

Now you can do:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.ts.registerNibCell(CustomNibTableViewCell.self)
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: CustomNibTableViewCell = tableView.ts.dequeueReusableCell(for: indexPath)

    return cell
}

UICollectionViewCell

Before, you had to do the following:

override func viewDidLoad() {
    super.viewDidLoad()
    let nib = UINib(nibName: "CustomNibCollectionViewCell", bundle: nil)
    collectionView.register(nib, forCellReuseIdentifier: "CustomNibCollectionViewCell")

    let supplementaryViewNib = UINib(nibName: "CustomCollectionViewSupplementaryReusableView", bundle: nil)
    collectionView?.register(supplementaryViewNib, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "CustomCollectionViewSupplementaryReusableView")

}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomNibCollectionViewCell", for: indexPath) as! CustomNibCollectionViewCell

    return cell
}

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CustomCollectionViewSupplementaryReusableView", for: indexPath) as! CustomCollectionViewSupplementaryReusableView

    return reusableView
}

Now you can do:

override func viewDidLoad() {
    super.viewDidLoad()
    collectionView!.ts.registerNibCell(CustomCollectionViewCell.self)
    collectionView!.ts.registerNibForSupplementaryView(CustomCollectionViewSupplementaryReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader)

}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell: CustomCollectionViewCell = collectionView.ts.dequeueReusableCell(for: indexPath)

    return cell
}

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let reusableView: CustomCollectionViewSupplementaryReusableView = collectionView.ts.dequeueReusableSupplementaryView(ofKind: kind, for: indexPath)

    return reusableView
}

UIViewController

Before, you had to do the following:

let collectionViewController = self.storyboard!.instantiateViewController(withIdentifier: "CustomCollectionViewController") as! CustomCollectionViewController

Now you can do:

let collectionViewController: CustomCollectionViewController = self.storyboard!.ts.instantiate()

UIView from nib

let simpleView: SimpleView = SimpleView.loadFromNib()

There are a few more example available at Example/.

Licence

JRTypedStrings is being provided under MIT Licence.

Copyright © 2017-present Panagiotis Sartzetakis

Latest podspec

{
    "name": "JRTypedStrings",
    "version": "1.1.0",
    "summary": "`JRTypedString` provides a convenience API that allows you access `UIViewControllers`, `UITableViewCells` etc, in a type-safe way.",
    "homepage": "https://github.com/psartzetakis/JRTypedStrings",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": "Panagiotis Sartzetakis",
    "source": {
        "git": "https://github.com/psartzetakis/JRTypedStrings.git",
        "tag": "1.1.0"
    },
    "social_media_url": "https://twitter.com/SartzetakisP",
    "source_files": "Source/*.swift",
    "platforms": {
        "ios": "8.0",
        "tvos": "9.0"
    },
    "requires_arc": true,
    "pushed_with_swift_version": "3.0"
}

Pin It on Pinterest

Share This