What’s the difference bet...
What’s the difference bet...
In Swift, the difference between init?()
and init()
lies in their behavior when initialization fails. Here’s a detailed explanation:
init()
init() {
// Initialization code
}
struct Person {
var name: String
init(name: String) {
self.name = name
}
}
let person = Person(name: "John")
init?()
nil
if the initialization fails due to invalid parameters or other conditions.nil
if initialization fails).init?(parameter: Type) {
guard condition else {
return nil
}
// Initialization code
}
struct Person {
var name: String
init?(name: String) {
guard !name.isEmpty else {
return nil
}
self.name = name
}
}
if let person = Person(name: "John") {
print("Person created: \(person.name)")
} else {
print("Failed to create person")
}
Return Type:
init()
: Always returns a fully initialized instance.init?()
: Returns an optional instance, which can be nil
if initialization fails.Use Cases:
init()
: Used when you are certain that the initialization will always succeed.init?()
: Used when there is a possibility that the initialization might fail due to invalid input or other conditions.Error Handling:
init()
: Does not handle errors internally; it assumes all inputs are valid.init?()
: Handles errors by returning nil
, allowing the caller to handle the failure case.Consider a scenario where you want to create a Person
struct, but the name must not be empty:
struct Person {
var name: String
init?(name: String) {
guard !name.isEmpty else {
return nil
}
self...
expert
Gợi ý câu hỏi phỏng vấn
Chưa có bình luận nào