- FCM - 2 Kb
- VOIP Notification - 5 kb
- For all other remote notification - 4 kb
Search Your Question
What is push notification payload maximum size?
What is trailing closure?
If the last parameter to a function is a closure, Swift lets you use special syntax called trailing closure syntax. Rather than pass in your closure as a parameter, you pass it directly after the function inside braces.
To demonstrate this, here’s our travel() function again. It accepts an action closure so that it can be run between two print() calls:
func travel(action: () -> Void) {
print("I'm getting ready to go.")
action()
print("I arrived!")
}
Because its last parameter is a closure, we can call travel() using trailing closure syntax like this:
travel() {
print("I'm driving in my car")
}
In fact, because there aren’t any other parameters, we can eliminate the parentheses entirely:
travel {
print("I'm driving in my car")
}
Trailing closure syntax is extremely common in Swift, so it’s worth getting used to.
Difference between method and function
Methods belong to classes, structs, and enums, whereas functions do not.
Methods always belong to a data type, they have a concept of self that functions do not. This is a special value passed in by Swift, and it refers to whatever instance the method was called on.
Swift uses the same keyword, func, for both functions and methods.
Difference between type method and Instance method?
Type Method: We can call the method using Struct, Class, or Enum name. The method can be static or Class for making such methods. Static method can not be override but class method can be override.
Instance Method: We can call normal method using making instance of strcut or class. This methods are called instance method.
Difference between Swift and Objective C
SWIFT | OBJECTIVE C | |
---|---|---|
Swift is a general-purpose, high-level programming language that is highly concerned about safety, and performance. | Objective C is a general-purpose language that is considered a superset of C language it was designed with the aim of providing object-oriented capabilities. | |
It was developed by Chris Lattner with eventual collaboration with other programmers at Apple. | It was developed by Brad Cox and Tom Love at their company Stepstone. | |
It was influenced by Objective C, Rust, Ruby, and Python. | It was influenced by C and Smalltalk. | |
Swift first appeared on the year 2014. | Objective C first appeared on the year 1984. | |
Swift is a static type. | Objective C is dynamic type. | |
Swift is apache licensed open-source project. | Objective C is licensed under General Public License. | |
It only has classes. | It has both Structs and classes. | |
It was designed for building apps for iOS, Mac, Apple TV, and Apple Watch. | Objective C was designed to be Smalltalk messaging features. | |
Swift polymorphism does not exist directly. | Polymorphism in Objective C exists directly in compile time. | |
It uses true and false values. | It uses YES and NO values and also BOOl. | |
Swift has multiple types of templates than Objective C. | Objective C lacks templates than Swift. |
What is remote config in firebase
Change the behavior and appearance of your app without publishing an app update, at no cost, for unlimited daily active users.
Firebase Remote Config is a cloud service that lets you change the behavior and appearance of your app without requiring users to download an app update. When using Remote Config, you create in-app default values that control the behavior and appearance of your app. Then, you can later use the Firebase console or the Remote Config backend APIs to override in-app default values for all app users or for segments of your user base. Your app controls when updates are applied, and it can frequently check for updates and apply them with a negligible impact on performance.
What is KVO?
Key-value observing is the ability for Swift to attach code to variables, so that whenever the variable is changed the code runs. It’s similar to property observers (willSet and didSet ), except KVO is for adding observers outside of the type definition.
KVO isn’t terribly nice in pure Swift code, because it relies on the Objective-C runtime – you need to use @objc classes that inherit from NSObject, then mark each of your properties with @objc dynamic.
For example, we could create a Car class like this:
@objc class Car: NSObject {
@objc dynamic var name = "BMW"
}
let bmw= Car()
You could then observe that user’s name changing like this:
bmw.observe(\Car.name, options: .new) { car, change in
print("I'm now called \(car.name)")
}
That asks BMW to watch for new values coming in, then prints the person’s name as soon as the new value is set.
To try it out, just change the car's name to something else:
bmw.name = "Mercedese"
That will print “I’m now called Mercedese.”
Although KVO is unpleasant in pure Swift code, it’s better when working with Apple’s own APIs – they are all automatically both @objc and dynamic because they are written in Objective-C.
However, one warning: even though large parts of UIKit might work with KVO, this is a coincidence rather than a promise – Apple makes no guarantees about UIKit remaining KVO-compatible in the future.
What is Protocol Oriented Programming?
Difference between compact map and Flat map
Compact Map :
Use this method to receive an array of nonoptional values when your transformation produces an optional value.
let scores = ["1", "2", "three", "four", "5"]
let mapped: [Int?] = scores.map { str in Int(str) }
// [1, 2, nil, nil, 5] - Two nil values as "three" and "four" are strings.
let compactMapped: [Int] = scores.compactMap { str in Int(str) }
// [1, 2, 5] - The nil values for "three" and "four" are filtered out.
Flat Map :
let scoresByName = ["Henk": [0, 5, 8], "John": [2, 5, 8]]
let mapped = scoresByName.map { $0.value }
// [[0, 5, 8], [2, 5, 8]] - An array of arrays
print(mapped)
let flatMapped = scoresByName.flatMap { $0.value }
// [0, 5, 8, 2, 5, 8] - flattened to only one array
How to switch from background queue to main queue?
If you're on a background thread and want to execute code on the main thread, you need to call async() again. However, this time, you do it on DispatchQueue.main, which is the main thread, rather than one of the global quality of service queues.
DispatchQueue.global(qos: .userInitiated).async {
if let url = URL(string: urlString) {
if let data = try? Data(contentsOf: url) {
self.parse(json: data)
return
}
}
self.showError()
}
func showError() {
DispatchQueue.main.async {
let ac = UIAlertController(title: "Loading error", message: "There was a problem loading the feed; please check your connection and try again.", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
self.present(ac, animated: true)
}
}
Sof here, If I want to work with UI-related stuff, I must switch queue to main. So to execute that code under DispatchQueue.main.async { } block.