2016-06-10 3 views
0

개체 수가 많으며 구입할 때까지 잠글 필요가 있습니다.공유 기능을위한 신속한 프로토콜

이러한 개체 (NSManaged)는 각각 productName StringisPurchased Bool입니다.

나는 싱글 톤에서 외부 검사뿐만 아니라 속성을 사용하는 isLocked() 함수를 작성했습니다.

어떻게 프로토콜에 결합하여 프로토콜에 isLocked 함수 구현이 포함되어 있으며 객체가 프로토콜을 준수하고 필요할 때 isLocked를 호출 할 수 있습니까?

+0

일반적인 구현이 필요한 경우 프로토콜 대신 슈퍼 클래스를 찾는 것처럼 들립니다. –

+0

그래, 분명히,하지만 지금은 불가능한 광범위한 리팩토링이 필요합니다. 나는 이것이 프로토콜을 사용하여 달성 된 것을 보았을 것이라고 확신했다. – jarryd

+0

프로토콜 지향 프로그래밍 Raywenderlich의 사이트 https://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2 또는 wwdc2015 https://developer.apple.com/videos/에서 확인하십시오. play/wwdc2015/408 /. 희망이 도움이됩니다. –

답변

2

실수가 아닌 경우이를 신속하게 구현할 수 있습니다. 다음이 위키 페이지 그러나 https://en.wikipedia.org/wiki/Mixin

을 첵 무엇 믹스 인 또는 디폴트의 구현에 대한 추가 정보를 원하시면

protocol Locakable { 
var productName: String { get } 
var isPurchased: Bool { get } 

func lock() 
func unlock() 
} 

extension Locakable { 

    func isLocked() { 
     if isPurchased { 
      //do something 
      //lock it 
      unlock() 
     } else { 
      lock() 
     } 
    } 
} 

isLocked() 정적으로 전달되고 있습니다. 무엇인가가 명확하지 않은 경우 의견을 제시하십시오.

또한 잠금 및 잠금 해제 아이디어를 추상화하고 가능한 경우 프로토콜 확장에 기본 구현을 작성할 수 있습니다. 또는 커스터마이즈 포인트를 제공하십시오.

class Item: Locakable { 
var productName = "ItemName" 
var isPurchased = false 

init() { 
    isLocked() 
} 

func lock() { 

} 

func unlock() { 

} 
} 
+0

자세한 내용은 Apple 담당자 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html 프로토콜 확장 섹션을 참조하십시오. 또한 아마도 NSHipster 매뉴얼이 http://nshipster.com/swift-default-protocol-implementations/에 더 적합 할 것입니다. – iyuna

+0

productName 및 isPurchased는 각 핵심 데이터 엔티티의 속성이므로 프로토콜 내에서 선언 할 수 없습니다. – jarryd

+0

이 속성을 캡슐화 할 계산 된 속성을 사용합니다. – kandelvijaya

관련 문제