2014-06-05 2 views
1

그래서 Swift를 배우기 시작했습니다. ObjC보다 더 좋아 보이기 때문입니다. 그러나 내가 Xcode가 왜 정의되지 않은 멤버를 호출하려고하는지 비명을 지르는 문제를 볼 수 없기 때문에 나는 피곤할 것임 (현재 2:37 AM). 문제는 엑스 코드가 stackViewNumberOfItems(self)스위프트 프로토콜 방법 사용법

PeopleStackViewDataSource를 말합니다이 줄 return self.datasource ? self.datasource.stackViewNumberOfItems(self) : 0입니다

PeopleStackViewDataSource.swift

import Foundation 
import UIKit 

protocol PeopleStackViewDataSource { 

    func stackViewNumberOfItems(stackView: PeopleStackView) -> Int 
    func stackViewGetView(indexPath: NSIndexPath) -> UIView 
} 

PeopleStackView.swift

import Foundation 
import UIKit 

class PeopleStackView: UIView { 

    var datasource: PeopleStackViewDataSource? { 
    didSet { 
     self.redraw() 
    } 
    } 

    var scaleDownBy: Double = 0.1 

    init(frame: CGRect) { 
     super.init(frame: frame) 

    } 

    init(frame: CGRect, datasource: PeopleStackViewDataSource) { 
     super.init(frame: frame); 
     self.datasource = datasource; 
    } 

    func numberOfItems() -> Int { 
     return self.datasource ? self.datasource.stackViewNumberOfItems(self) : 0 
    } 

    func redraw() { 

    } 


} 

': 아래의 코드를 참조하십시오? 'stackViewNumberOfItems

그래서, 문제는 이름의 멤버가없는?

답변

3

문제는

PeopleStackViewDataSource?' does not have a member named 'stackViewNumberOfItems 

하지만 PeopleStackViewDataSource 당신은 선택 datasource 랩을 해제 할 필요가

합니다 (? 통지) 않는다는 것입니다.

func numberOfItems() -> Int { 
    if let ds = self.datasource { 
     return ds.stackViewNumberOfItems(self) 
    } else { return 0 }   
} 
+0

그래서 '?' 사실? –

+0

이는 'PeopleStackViewDataSource'의 '선택 사항'즉, 'PeopleStackViewDataSource'와는 다른 유형입니다. 그것에 대해 더 알고 싶다면 공식 가이드를 읽으십시오. –

+0

그래서 내 수표에 대해 구문이 어떻게 보이고 '?' –

관련 문제