Search Your Question

Difference between Cocoa and Cocoa Touch

And : 

Application Framework For
i) Cocoa is the application framework for Mac OS X.
ii) Cocoa Touch is the application framework for iPhone and iPod Touch.
Frameworks
i) Cocoa: Foundation and AppKit.
ii) Cocoa Touch: Foundation and UIKit
Absence of certain classes
Cocoa has NSHost and Cocoa Touch doesn't
API
i) Cocoa: All the classes used in Cocoa have the NS prefix Ex: NSTextField
ii) Cocoa Touch: classes used in Cocoa have the UI prefix Ex: UITextField
MVC patterns
i) Cocoa: Cocoa has multiple alternative design patterns – in addition to MVC
ii) Cocoa Touch: The iPhone SDK has a reinforced MVC system, which performs better than the default MVC in Cocoa
Other Differences
There Are also Differences In App Lifecycle, Sandboxing ,Memory Footprint

Difference between POP and OOP

Ans : 

POP - Protocol oriented programming
OOP - Object oriented programming

Swift has both power. POP has more advanced features having object oriented feature itself.



Base class of different class or views

Ans :

Base class of

UITableView : UIScrollView : UIView : UIResponder : NSObject
UIButton : UIControl : UIView : UIResponder : NSObject
NSObject : It is top most super class in swift. NSObject class confirm NSObject protocol.

Q : Is it compulsory to mention NSObject in swift inheritance?
A : No. Any class which is not inheriting any other class have NSObject as super class by default.


How to handle error in Swift?

Ans : 

Error Protocol is just a type for representing error values that can be thrown.

Lets declare our custom error enum by confirming Error protocol.

enum UserDetailError: Error {
        case noValidName
        case noValidAge
}

Now we make one function that throw our error type.

func userTest(age: Int, name: String) throws {
    
    guard age > 0 else {
           throw UserDetailError.noValidAge
    }
    
    guard name.count > 0 else {
           throw UserDetailError.noValidName
    }
}

In function signature, throws keyword is used and in function throw keyword is used to throw error.

Now we cal our function userTest that can throw error.

do{
       try userTest(age: -1, name: "")
}
catch UserDetailError.noValidName
{
        print("The name isn't valid")
}
catch UserDetailError.noValidAge
{
         print("The age isn't valid")
}
catch let error {
          print("Unspecified Error: \(error)")
}


Swift try, try? and try! 

  • Swift try is the most basic way of dealing with functions that can throw errors. try is only used within a do-catch block. However, try? and try! can be used without it.
  • try? is used to handle errors by converting the error into an optional value. This way if an error occurs, the function would return a nil and we known Optionals can be nil in Swift. Hence for try? you can get rid of do-catch block. 
  • try! is used to assert that the error won’t occur. Should be only used when you’re absolutely sure that the function won’t throw an error. Like try?, try! works without a do-catch block.

var t1 = try? Student(name: nil)
var t2 = try! Student(name: "Anupam")



Some truths about protocol

Q1 : Can structure confirm protocol?
A1 : Yes

Q2 : Can enumeration confirm protocol?
A2 : Yes

Q3 : Can we declare variable in protocol?
A3 : Yes -> It must be var and it must be read-Only or readAndWrite . Property declaration is like following : 

protocol someprotocol {
     var gettable : Int { get }
      var setAndGettable : Int { get set }

Q4 : Can we add function in the enumeration?
A4 : Yes

Q5 : Can protocol has own init method?
A5 : Yes

Q6 : Can protocol inherit another protocol?
A6 : Yes
protocol someprotocol : anotherprotocol {

}

Q7: Can we make a class-specific protocol?
A7: You can limit protocol adoption to class types (and not structures or enumerations) by adding the AnyObject or class protocol to a protocol’s inheritance list.

protocol someprotocol : AnyObject, Someanotherprotocol {
}

Now someprotocol can only be confirmed by class type. No structure or enum type can confirm this protocol.

Q8. Can we declare an optional protocol method in swift?
A8. Yes. In that protocol name and optional methods should be followed by @objc due to it consider as objective c code.

@objc protocol someprotocol {
        @objc optional func somemethod()
        @objc optional var someName : String { get set }
}

or 

We can make protocol extension and provide default body to protocol method. So any class or struct confirms that protocol doesn't require implementing that method.

Q.9 Can protocol be fileprivate?

A9. Yes. Protocol can be fileprivate, private, public. Private and fileprivate protocol can be confirmed only within current file.

Q.10 Can we define property in extension?
A10. Swift doesn’t support stored properties inside the extension. Computed property is allowed in extension.

Q.11 Can we define property in protocol?
A.11 Property in protocol must have explicit { get } or { get set } specifier. 

protocol VoiceAssistant {
        var s : String // Not allowed
        var name: String {get} // Allowed
        var voice: String {get set} // Allowed

    }

Q.12 Can we declare same name property in protocol and its extension with different datatype?
A.12 Yes. Extension declared property must have valid getter method.

protocol VoiceAssistant {
   
    var name: String {get}
    var voice: String {get set}
}

extension VoiceAssistant {
    var name: Int {get { return 5}}

}

Q.13 Can we define body in method in protocol? How?
A.13 Yes.

protocol VoiceAssistant {
    func makeMessage()
}

extension VoiceAssistant {
    func makeMessage() {
        print("Default make message method")
    }

}