저는 스위프트를 사용하고 있으며 기존의 objective-c 블록에 클로저를 지정할 수있는 방법이 있는지 궁금합니다.브릿지를 사용하여 기존의 objective-c 블록에 액세스하는 신속한 클로저 (블록 상당) 할당
fromObjC?.performBlock = {someVar in /*do something*/}
"이 표현의 결과에 할당 할 수 없습니다."라는 오류 메시지가 나타납니다.
저는 스위프트를 사용하고 있으며 기존의 objective-c 블록에 클로저를 지정할 수있는 방법이 있는지 궁금합니다.브릿지를 사용하여 기존의 objective-c 블록에 액세스하는 신속한 클로저 (블록 상당) 할당
fromObjC?.performBlock = {someVar in /*do something*/}
"이 표현의 결과에 할당 할 수 없습니다."라는 오류 메시지가 나타납니다.
objective-C의 개체에 대한 모든 포인터는 포인터가 없으므로 신속하게 선택 가능해야합니다. 변수가 실제로 nil이되지 않는다는 것을 안다면 암시 적으로 래핑되지 않은 옵션 (TypeName!
)을 사용하여 래핑 할 필요가 없습니다.
그래서
void(^performBlock)(UIStoryboardSegue* segue, UIViewController* svc, UIViewController* dvc)
가된다 : 변수가 nil이있을 경우
{(segue : UIStoryboardSegue!, svc : UIViewController!, dvc : UIViewController!) in
// Implementation
}
, 당신은 다음과 같을 것이다 정상적인 선택적으로 사용한다 : 실제로
{(segue : UIStoryboardSegue?, svc : UIViewController?, dvc : UIViewController?) in
// Implementation
}
과, 이 속성에 속성을 할당하면 형식을 지정하지 않아도됩니다 (유추됩니다) :
{(segue, svc, dvc) in
// Implementation
}
예, 방법이 있지만 형식이 일치해야합니다. performBlock은 어떤 유형입니까? – drewag
** bold **'void (^ performBlock) (UIStoryboardSegue * segue, UIViewController * svc, UIViewController * dvc) ' – Axel
선택적 연결의 결과에 할당 할 수 없습니다. 가장 쉬운 방법은'if let p = fromObjC {p.performBlock = ...} '입니다. –