diff --git a/Example/SplitflapExample/ViewController.swift b/Example/SplitflapExample/ViewController.swift index e37030f..d001640 100644 --- a/Example/SplitflapExample/ViewController.swift +++ b/Example/SplitflapExample/ViewController.swift @@ -51,7 +51,10 @@ class ViewController: UIViewController, SplitflapDataSource, SplitflapDelegate { return 7 } - func tokensInSplitflap(_ splitflap: Splitflap) -> [String] { + func tokensInSplitflap(_ splitflap: Splitflap, flap: Int) -> [String] { + if flap == 0 { + return SplitflapTokens.Alphanumeric + } return SplitflapTokens.AlphanumericAndSpace } diff --git a/Example/tvOSExample/ViewController.swift b/Example/tvOSExample/ViewController.swift index b0c7d71..0479b18 100644 --- a/Example/tvOSExample/ViewController.swift +++ b/Example/tvOSExample/ViewController.swift @@ -51,7 +51,7 @@ class ViewController: UIViewController, SplitflapDataSource, SplitflapDelegate { return 7 } - func tokensInSplitflap(_ splitflap: Splitflap) -> [String] { + func tokensInSplitflap(_ splitflap: Splitflap, flap: Int) -> [String] { return SplitflapTokens.AlphanumericAndSpace } diff --git a/Sources/Splitflap.swift b/Sources/Splitflap.swift index 74b9e77..854f8fa 100644 --- a/Sources/Splitflap.swift +++ b/Sources/Splitflap.swift @@ -71,23 +71,6 @@ import UIKit } } - // MARK: - Getting Supported Tokens - - /** - The supported token strings by the split-flap view. - - A Splitflap object fetches the value of this property from the data source and - and caches it. By default there is no token. - */ - open fileprivate(set) var tokens: [String] = [] { - didSet { - tokenParser = TokenParser(tokens: tokens) - } - } - - /// Token parser used to parse text into small chunk send to each flaps. - fileprivate var tokenParser: TokenParser = TokenParser(tokens: []) - // MARK: - Configuring the Flap Spacing /** @@ -134,15 +117,15 @@ import UIKit let target = (delegate ?? self) let delay = animated ? 0.181 : 0 - var tokens: [String] = [] - - if let string = text { - tokens = tokenParser.parseString(string) - } - textAsToken = nil for (index, flap) in flaps.enumerated() { + var tokens = self.datasource?.tokensInSplitflap(self, flap: index) ?? [] + let parser = TokenParser(tokens: tokens) + if let string = text { + tokens = parser.parseString(string) + } + let token: String? = index < tokens.count ? tokens[index] : nil let rotationDuration = animated ? target.splitflap(self, rotationDurationForFlapAtIndex: index) : 0 @@ -205,7 +188,7 @@ import UIKit var tmp: [FlapView] = [] for index in 0 ..< numberOfFlaps { - let flap = FlapView(tokens: tokens, builder: targetDelegate.splitflap(self, builderForFlapAtIndex: index)) + let flap = FlapView(tokens: self.datasource?.tokensInSplitflap(self, flap: index) ?? [], builder: targetDelegate.splitflap(self, builderForFlapAtIndex: index)) tmp.append(flap) addSubview(flap) @@ -230,7 +213,6 @@ import UIKit let target = (datasource ?? self) numberOfFlaps = target.numberOfFlapsInSplitflap(self) - tokens = target.tokensInSplitflap(self) updateAndLayoutView() } diff --git a/Sources/SplitflapDataSource.swift b/Sources/SplitflapDataSource.swift index b95bee8..85eeaf8 100644 --- a/Sources/SplitflapDataSource.swift +++ b/Sources/SplitflapDataSource.swift @@ -54,13 +54,13 @@ public protocol SplitflapDataSource: class { - returns: A list of token string used by each flaps to manage their stack of token. */ - func tokensInSplitflap(_ splitflap: Splitflap) -> [String] + func tokensInSplitflap(_ splitflap: Splitflap, flap: Int) -> [String] } /// Default implementation of SplitflapDataSource public extension SplitflapDataSource { /// Returns by default the Alphanumeric token list. - func tokensInSplitflap(_ splitflap: Splitflap) -> [String] { + func tokensInSplitflap(_ splitflap: Splitflap, flap: Int) -> [String] { return SplitflapTokens.Alphanumeric } } diff --git a/Tests/SplitflapDataSourceDatasourceTests.swift b/Tests/SplitflapDataSourceDatasourceTests.swift index 976509c..512b978 100644 --- a/Tests/SplitflapDataSourceDatasourceTests.swift +++ b/Tests/SplitflapDataSourceDatasourceTests.swift @@ -39,7 +39,7 @@ class SplitflapDataSourceDatasourceTests: XCTTestCaseTemplate { let splitflap = Splitflap() XCTAssertEqual(datasourceMock.numberOfFlapsInSplitflap(splitflap), 0) - XCTAssertEqual(datasourceMock.tokensInSplitflap(splitflap), SplitflapTokens.Alphanumeric) + XCTAssertEqual(datasourceMock.tokensInSplitflap(splitflap, flap:0), SplitflapTokens.Alphanumeric) } func testCustomImplementation() { @@ -48,7 +48,7 @@ class SplitflapDataSourceDatasourceTests: XCTTestCaseTemplate { return 5 } - func tokensInSplitflap(_ splitflap: Splitflap) -> [String] { + func tokensInSplitflap(_ splitflap: Splitflap, flap: Int) -> [String] { return SplitflapTokens.Numeric } } @@ -57,6 +57,6 @@ class SplitflapDataSourceDatasourceTests: XCTTestCaseTemplate { let splitflap = Splitflap() XCTAssertEqual(datasourceMock.numberOfFlapsInSplitflap(splitflap), 5) - XCTAssertEqual(datasourceMock.tokensInSplitflap(splitflap), SplitflapTokens.Numeric) + XCTAssertEqual(datasourceMock.tokensInSplitflap(splitflap, flap:0), SplitflapTokens.Numeric) } }