보기 컨트롤러에서 IBOutlets를 스타일 화하기 위해 일종의 범용 willSet 클로저를 만들 수 있습니까?Swift에서 IBOutlets의 스타일링을위한 일반적인 willSet 클로저 만들기
현재이 코드를 사용하면이 코드를 사용하여 UIImageView의 색조를 설정할 수 있습니다.
@IBOutlet weak var someImageView:UIImageView! {
willSet {
newValue.tintColor = .primary
}
}
이 지금은 많은 것 같아 내가 같은 방법으로 나를 위해 스타일을 원하는 매장의 전체 무리가 있습니다 ".primary"나는 UIColor 확장을 통해 생성 UIColor에 AA 정적 변수입니다 중복 코드의 경우 특히 색조를 설정하는 것보다 더 많은 스타일링을 적용하기 시작하면보다 일반적인 것을 원합니다.
let tintClosure: (_ newValue: UIView?) ->() = { $0?.tintColor = .primary }
@IBOutlet weak var someImageView:UIImageView! { willSet{ tintClosure(newValue) } }
가 지금은 한 번만 실제 색조의 코드를 작성해야 그냥 willSet의 폐쇄를 호출 할 수 있습니다 : 내가 함께했다. 그러나 더 효율적인 방법이 있는지 궁금해서 폐쇄 (newValue)를 직접 호출하지 않아도되지만 tintClosure 만 지정하면됩니다.
함수가 완료 핸들러를 예상하고 해당 선언에 맞는 함수를 갖고 있고 함수를 호출하는 클로저 대신 함수의 이름을 전달하면 좋아하는 것과 같습니다.
뭔가 정말 멋진 같은 :
@IBOutlet weak var someImageView:UIImageView! { superDuperClosure(willSet) }
또는
@IBOutlet weak var someImageView:UIImageView! { willSet{ crazyImplementationOfTintClosre } }
또는
@IBOutlet weak var someImageView:UIImageView! { willSet.howIsThisEvenPossible }
또는
@IBOutlet weak var someImageView:UIImageView! { nowWeAreTalking }
음, 어쩌면 나는 맨 위에 생각하고 있고, 이미 그것을하는 가장 단순한 방법을 발견했다. 어쩌면 willSet 작동 방식을 충분히 이해하지 못했을 수도 있습니다. 그래서 친애하는 스위프트 전문가, 나에게 멋진 개발자가되는 법을 가르쳐주세요.
내가 다른 생각을했다 파울로 마토스에서 두 번째 제안을 바탕으로 업데이트
. 모든 이미지 뷰를 포함하는 콘센트 컬렉션을 만들었습니다. 당신은 기본적으로 색을 칠 하나 같은 다양한 목적을 위해 콘센트 컬렉션을 만들 수
@IBOutlet var imageViewsToTint: [UIImageView]! { willSet { newValue.forEach { $0.tintColor = .primary } } }
이 방법의 좋은 점은, 하나를 : 그럼 난 그냥 코드의 좋은 작은 조각 하나 하나를 염색 그들 모두를 반복 텍스트 크기 등을 지정하고 스타일을 지정하려는보기를 적절한 컬렉션에 연결할 수 있습니다.
달콤한 :) 그리고, 현재의 솔루션보다을 더 오류가 발생하기 쉬운 수 있습니다 -하지만 너무 많은 해킹없이 일을 얻을 수 - 당신은 여기 저기에보기를 놓칠 수도 *이 디자인. 결과 설정은 Interface Builder에서도 항상 볼 수 있습니다! –