}
위 코드에서 [unowned self]가 무엇을 하는지 아시나요? 루프를 방지하기 위한 것이라는 것은 알지만 이 코드는 이해하기가 좀 어렵습니다. 어떤 루프가 방지되고 있습니까?
더 중요한 질문은 [소유되지 않은 자아] 뒤에 있는 행동이 무엇인지입니다. 그것은 허공에서 나타나는 것 같습니다. 그것이 무엇을 의미하는지 모르겠지만, 그것이 없으면 코드는 오류를 보고할 것입니다.
guard let textField = Alert.textFields?.first,
으아악위 두 코드는 무엇을 의미하나요? "alert.textFields?.first"은(는) 무슨 뜻인가요? 텍스트 필드를 추가하기 전에 이 경고가 텍스트 필드를 참조할 수 있는 이유는 무엇입니까?
질문이 많아서 코드에 클로저가 나오면 어지러워지네요. 누가 자세히 답변해주셨으면 좋겠습니다.
블록 내부에 순환 참조가 없기 때문에 위 코드에 [unowned self]를 추가할 필요가 없습니다
action
是UIAlertAction 便利构造函数public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil)
의 핸들러 블록 매개변수는 Swift 후행 클로저 작성 방법 때문입니다.
으아악textFields
是UIAlertController
中的可变数组var textFields: [UITextField]?
guard是对
textFields
可选属性进行可选绑定,textField
는 옵셔널 값을 언팩한 후의 값으로 nil이 아닙니다. textFields의 옵셔널 값이 nil이면 다음 코드는 실행되지 않습니다.미소유 키워드와 약함은 모두 참조 순환을 깨는 데 사용됩니다. 약함과의 차이점은 참조된 인스턴스가 더 긴 수명 주기를 보장할 수 있을 때 일반적으로 사용된다는 것입니다. 이 경우 ARC는 인스턴스를 자동으로 설정하지 않습니다. . 하지만 위의 코드에 [onowned self]를 추가할 필요는 없을 것 같습니다. 여기서 순환 참조가 발생하는지 알 수 없습니다.
[unowned self] 뒤에 오는 작업은 이것이 클로저의 매개변수임을 나타냅니다. UIAlertAction 생성자의 마지막 매개변수에는 다음과 같이 UIAlertAction! 유형의 매개변수가 필요하기 때문입니다.
으아악convenience init(title title: String!, style 스타일: UIAlertActionStyle, 핸들러 핸들러: ((UIAlertAction!) -> Void)!)
이 코드의 의미는 Alert.textFields?.first가 비어 있지 않은 경우에만 후속 로직이 실행되고, 그렇지 않으면 직접 반환된다는 것입니다. 두 번째 let은 첫 번째 let의 textField가 nil이 아닌 경우에만 실행될 수 있습니다. 이는 Swift에서 일반적인 사용법입니다. 자세한 내용은 설명서를 확인하세요.