Reputation: 780
So I've started learning Swift, because it looks way better than ObjC. However I must be tired (its 2:37 AM here right now) because I cant see issue why Xcode screams I am trying to call undefined member. See the code below:
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() {
}
}
The issue is this line return self.datasource ? self.datasource.stackViewNumberOfItems(self) : 0
where Xcode says that stackViewNumberOfItems(self)
PeopleStackViewDataSource?' does not have a member named 'stackViewNumberOfItems
So, where is the issue?
Upvotes: 1
Views: 1081
Reputation: 108151
The issue is that
PeopleStackViewDataSource?' does not have a member named 'stackViewNumberOfItems
but PeopleStackViewDataSource
does (notice the ?
)
You need to unwrap the optional datasource
.
func numberOfItems() -> Int {
if let ds = self.datasource {
return ds.stackViewNumberOfItems(self)
} else { return 0 }
}
Upvotes: 3