Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create a new Swift project without using Storyboards?

Tags:

ios

swift

xcode6

Creating a new project in XCode 6 doesn't allow to disable Storyboards. You can only select Swift or Objective-C and to use or not Core Data.

I tried deleting the storyboard and from the project removing the main storyboard and manually setting the window from didFinishLaunching

In the AppDelegate I have this:

class AppDelegate: UIResponder, UIApplicationDelegate {  var window: UIWindow var testNavigationController: UINavigationController      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {          testNavigationController = UINavigationController()         var testViewController: UIViewController = UIViewController()         self.testNavigationController.pushViewController(testViewController, animated: false)          self.window = UIWindow(frame: UIScreen.mainScreen().bounds)          self.window.rootViewController = testNavigationController          self.window.backgroundColor = UIColor.whiteColor()          self.window.makeKeyAndVisible()          return true     } } 

However, XCode gives me an error:

Class 'AppDelegate' has no initializers

Anyone has succeed in this?

like image 216
EhTd Avatar asked Jun 04 '14 20:06

EhTd


People also ask

How do I not use storyboard?

Once the project is created and opened in Xcode, select the Main. storyboard file and delete it. Select “Move to trash” from the confirmation dialog. Bye-bye storyboard!

How do I make a swift project?

To create a new Swift package, open Xcode and select File > New > Swift Package. Choose a name and select a file location. Select “Create Git repository on my Mac” to put your package under version control. On completion, the Swift package opens in Xcode and looks similar to a standard Xcode project.

Should I use storyboards or SwiftUI?

Storyboard Advantages over SwiftUIIt is easier to use Storyboard as a beginner . Storyboard consist of Xib and custom View which can be reusable in the projects. It is easier to build an app as there is only drag and drop of the elements of the storyboard.

How do I start a new project in Xcode?

Launch Xcode, then click “Create a new Xcode project” in the Welcome to Xcode window or choose File > New > Project. In the sheet that appears, select the target operating system or platform and a template under Application.


2 Answers

All it takes for not using Storyboards for the rootViewController:

1· Change AppDelegate.swift to:

import UIKit  @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {      var window: UIWindow?      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {         window = UIWindow(frame: UIScreen.main.bounds)         if let window = window {             window.backgroundColor = UIColor.white             window.rootViewController = ViewController()             window.makeKeyAndVisible()         }         return true     } } 

2· Create a ViewController subclass of UIViewController:

import UIKit  class ViewController: UIViewController {      override func viewDidLoad() {         super.viewDidLoad()         view.backgroundColor = UIColor.blue     } } 

3· If you created the project from an Xcode template:

  1. Remove the key-value pair for key "Main storyboard file base name" from Info.plist.
  2. Delete the storyboard file Main.storyboard.

As you can see in the first code snippet, instead of implicitly unwrapping an optional, I rather like the if let syntax for unwrapping the optional window property. Here I'm using it like if let a = a { } so that the optional a becomes a non-optional reference inside the if-statement with the same name – a.

Finally self. is not necessary when referencing the window property inside it own class.

like image 92
tobiasdm Avatar answered Sep 20 '22 20:09

tobiasdm


You must mark the window and testNavigationController variables as optional:

var window : UIWindow? var testNavigationController : UINavigationController? 

Swift classes require non-optional properties to be initialized during the instantiation:

Classes and structures must set all of their stored properties to an appropriate initial value by the time an instance of that class or structure is created. Stored properties cannot be left in an indeterminate state.

Properties of optional type are automatically initialized with a value of nil, indicating that the property is deliberately intended to have “no value yet” during initialization.

When using optional variables, remember to unwrap them with !, such as:

self.window!.backgroundColor = UIColor.whiteColor(); 
like image 39
akashivskyy Avatar answered Sep 20 '22 20:09

akashivskyy