1年前に書いたprepareForSegue(_:)がoptional bindingとtype castingの地獄になっていたので、パターンマッチングで描き直してみました。確かにネストは浅くなりましたが、これはこれで地獄なのかもしれません。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch (segue.identifier, segue.destinationViewController, sender) {
    case ("Web"?, let viewController as WebViewController, let cell as UITableViewCell) where cell == feedbackCell:
        viewController.initialURL = NSURL(string: "https://example.com/feedback")

    case ("Web"?, let viewController as WebViewController, let cell as UITableViewCell) where cell == privacyPolicyCell:
        viewController.initialURL = NSURL(string: "https://example.com/privacy")

    case ("SignIn"?, let navigationController as UINavigationController, _):
        guard let viewController = navigationController.viewControllers.first as? SignInViewController else {
            fallthrough
        }
        viewController.privateRepositoryEnabled = privateRepositorySwitch.on
        viewController.navigationItem.hidesBackButton = true

    default:
        fatalError("Unknown segue performed.")
    }
}