From 46ea06d9cc4b8799ab6a9c4dfa924a338ffe5779 Mon Sep 17 00:00:00 2001 From: pawurb Date: Thu, 2 Nov 2017 15:16:38 +0100 Subject: [PATCH] update to swift 4 --- ABKit.podspec | 2 +- ABKit.xcodeproj/project.pbxproj | 94 +++++++++++-------- ABKit/Codes/ConditionalTest.swift | 12 +-- ABKit/Codes/ConditionalVersion.swift | 4 +- ...SUserDefaults+RandomNumberRepository.swift | 16 ++-- ABKit/Codes/RandomNumberRepository.swift | 6 +- ABKit/Codes/SplitTest.swift | 28 +++--- ABKit/Codes/Version.swift | 8 +- ABKit/Codes/VersionWeight.swift | 4 +- ...rDefaults+RandomNumberRepositorySpec.swift | 2 +- ABKitTests/SplitTestSpec.swift | 6 +- Podfile | 4 +- Podfile.lock | 16 ++-- 13 files changed, 111 insertions(+), 91 deletions(-) diff --git a/ABKit.podspec b/ABKit.podspec index 07a1923..4773516 100644 --- a/ABKit.podspec +++ b/ABKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "ABKit" - s.version = "0.1.0" +f s.version = "0.2.0" s.summary = "AB testing framework for iOS" s.description = <<-DESC ABKit is a library for implementing a simple Split Test that: diff --git a/ABKit.xcodeproj/project.pbxproj b/ABKit.xcodeproj/project.pbxproj index 1c4e54f..b40dd0c 100644 --- a/ABKit.xcodeproj/project.pbxproj +++ b/ABKit.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 38EF8B652AF26F2465387A33 /* Pods_ABKitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22E564495A2765E422B3B15D /* Pods_ABKitTests.framework */; }; 3D10CF2B1C6DA4E1002A2016 /* ABKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D10CF2A1C6DA4E1002A2016 /* ABKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3D10CF321C6DA4E1002A2016 /* ABKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D10CF271C6DA4E1002A2016 /* ABKit.framework */; }; 3D2CCB0C1C7FDDC200152924 /* ConditionalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D2CCB0B1C7FDDC200152924 /* ConditionalTest.swift */; }; @@ -22,6 +21,7 @@ 53D5F9B01C6DCE64004E832B /* VersionWeightSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D5F9AF1C6DCE64004E832B /* VersionWeightSpec.swift */; }; 53D5F9B21C6DD149004E832B /* NSUserDefaults+RandomNumberRepositorySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D5F9B11C6DD149004E832B /* NSUserDefaults+RandomNumberRepositorySpec.swift */; }; 53DC27A11C6DAED20040005E /* SplitTestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53DC27A01C6DAED20040005E /* SplitTestSpec.swift */; }; + 636AEC5AB4BB96DA01157CB0 /* Pods_ABKitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9EE4E2FF6203125D03620BC /* Pods_ABKitTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -35,8 +35,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 1030AAA5A25025EFD4FDF524 /* Pods-ABKitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.debug.xcconfig"; sourceTree = ""; }; - 22E564495A2765E422B3B15D /* Pods_ABKitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ABKitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3D10CF271C6DA4E1002A2016 /* ABKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ABKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3D10CF2A1C6DA4E1002A2016 /* ABKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ABKit.h; sourceTree = ""; }; 3D10CF2C1C6DA4E1002A2016 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -51,10 +49,12 @@ 3DD4E6661C6DAA190089473B /* Version.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; 3DD4E66A1C6DAD410089473B /* RandomNumberRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomNumberRepository.swift; sourceTree = ""; }; 3DD4E66C1C6DAE4A0089473B /* NSUserDefaults+RandomNumberRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+RandomNumberRepository.swift"; sourceTree = ""; }; - 4BFA0C4A40C2D2B016305DBC /* Pods-ABKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.release.xcconfig"; sourceTree = ""; }; 53D5F9AF1C6DCE64004E832B /* VersionWeightSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionWeightSpec.swift; sourceTree = ""; }; 53D5F9B11C6DD149004E832B /* NSUserDefaults+RandomNumberRepositorySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+RandomNumberRepositorySpec.swift"; sourceTree = ""; }; 53DC27A01C6DAED20040005E /* SplitTestSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplitTestSpec.swift; sourceTree = ""; }; + 84F219074146D56A2B39827F /* Pods-ABKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.release.xcconfig"; sourceTree = ""; }; + A4DB337A4EAFCC0153FCF40A /* Pods-ABKitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.debug.xcconfig"; sourceTree = ""; }; + E9EE4E2FF6203125D03620BC /* Pods_ABKitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ABKitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -70,21 +70,38 @@ buildActionMask = 2147483647; files = ( 3D10CF321C6DA4E1002A2016 /* ABKit.framework in Frameworks */, - 38EF8B652AF26F2465387A33 /* Pods_ABKitTests.framework in Frameworks */, + 636AEC5AB4BB96DA01157CB0 /* Pods_ABKitTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2471542489B36CF9BC805F81 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E9EE4E2FF6203125D03620BC /* Pods_ABKitTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 3AD11926FCE5B3F141A64AFE /* Pods */ = { + isa = PBXGroup; + children = ( + A4DB337A4EAFCC0153FCF40A /* Pods-ABKitTests.debug.xcconfig */, + 84F219074146D56A2B39827F /* Pods-ABKitTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; 3D10CF1D1C6DA4E1002A2016 = { isa = PBXGroup; children = ( 3D10CF291C6DA4E1002A2016 /* ABKit */, 3D10CF351C6DA4E1002A2016 /* ABKitTests */, 3D10CF281C6DA4E1002A2016 /* Products */, - B065F1B0026A1DD49EE95394 /* Pods */, - 4032D80C528A3D639DC536D5 /* Frameworks */, + 3AD11926FCE5B3F141A64AFE /* Pods */, + 2471542489B36CF9BC805F81 /* Frameworks */, ); sourceTree = ""; }; @@ -134,23 +151,6 @@ path = Codes; sourceTree = ""; }; - 4032D80C528A3D639DC536D5 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 22E564495A2765E422B3B15D /* Pods_ABKitTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B065F1B0026A1DD49EE95394 /* Pods */ = { - isa = PBXGroup; - children = ( - 1030AAA5A25025EFD4FDF524 /* Pods-ABKitTests.debug.xcconfig */, - 4BFA0C4A40C2D2B016305DBC /* Pods-ABKitTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -187,12 +187,12 @@ isa = PBXNativeTarget; buildConfigurationList = 3D10CF3E1C6DA4E1002A2016 /* Build configuration list for PBXNativeTarget "ABKitTests" */; buildPhases = ( - E25764AB338FE1DB92D00F7C /* Check Pods Manifest.lock */, + E6ABEDE5DC97FC4FF3F23325 /* [CP] Check Pods Manifest.lock */, 3D10CF2D1C6DA4E1002A2016 /* Sources */, 3D10CF2E1C6DA4E1002A2016 /* Frameworks */, 3D10CF2F1C6DA4E1002A2016 /* Resources */, - 046228D421FEC92C198AC274 /* Embed Pods Frameworks */, - B0D2480D98990ACCDC21F66F /* Copy Pods Resources */, + C9D4DA1A5C5673CA530B7419 /* [CP] Embed Pods Frameworks */, + AFE8944335842B21C49949E5 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -216,9 +216,11 @@ TargetAttributes = { 3D10CF261C6DA4E1002A2016 = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0900; }; 3D10CF301C6DA4E1002A2016 = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0900; }; }; }; @@ -258,49 +260,57 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 046228D421FEC92C198AC274 /* Embed Pods Frameworks */ = { + AFE8944335842B21C49949E5 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-frameworks.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - B0D2480D98990ACCDC21F66F /* Copy Pods Resources */ = { + C9D4DA1A5C5673CA530B7419 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework", + "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework", ); - name = "Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E25764AB338FE1DB92D00F7C /* Check Pods Manifest.lock */ = { + E6ABEDE5DC97FC4FF3F23325 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = "Check Pods Manifest.lock"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ABKitTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -447,6 +457,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -464,28 +476,34 @@ PRODUCT_BUNDLE_IDENTIFIER = "jp.co.recruit-mp.ABKit"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Release; }; 3D10CF3F1C6DA4E1002A2016 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1030AAA5A25025EFD4FDF524 /* Pods-ABKitTests.debug.xcconfig */; + baseConfigurationReference = A4DB337A4EAFCC0153FCF40A /* Pods-ABKitTests.debug.xcconfig */; buildSettings = { INFOPLIST_FILE = ABKitTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "jp.co.recruit-mp.ABKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Debug; }; 3D10CF401C6DA4E1002A2016 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4BFA0C4A40C2D2B016305DBC /* Pods-ABKitTests.release.xcconfig */; + baseConfigurationReference = 84F219074146D56A2B39827F /* Pods-ABKitTests.release.xcconfig */; buildSettings = { INFOPLIST_FILE = ABKitTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "jp.co.recruit-mp.ABKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Release; }; diff --git a/ABKit/Codes/ConditionalTest.swift b/ABKit/Codes/ConditionalTest.swift index 803fc74..7d40de5 100644 --- a/ABKit/Codes/ConditionalTest.swift +++ b/ABKit/Codes/ConditionalTest.swift @@ -6,23 +6,23 @@ // Copyright © 2016 Recruit Marketing Partners Co.,Ltd. All rights reserved. // -public class ConditionalTest { - public let name: String - public let defaultVersion: Version +open class ConditionalTest { + open let name: String + open let defaultVersion: Version - private var versions: [ConditionalVersion] = [] + fileprivate var versions: [ConditionalVersion] = [] public init(name: String, defaultVersion: Version) { self.name = name self.defaultVersion = defaultVersion } - public func addVersion(version: Version, condition: (T) -> Bool) { + open func addVersion(_ version: Version, condition: @escaping (T) -> Bool) { let conditionalVersion = ConditionalVersion(name: version.name, behavior: version.behavior, condition: condition) versions.append(conditionalVersion) } - public func run(value: T) { + open func run(_ value: T) { var isRun = false for version in versions { if version.condition(value) { diff --git a/ABKit/Codes/ConditionalVersion.swift b/ABKit/Codes/ConditionalVersion.swift index 9dc07ba..500b648 100644 --- a/ABKit/Codes/ConditionalVersion.swift +++ b/ABKit/Codes/ConditionalVersion.swift @@ -7,9 +7,9 @@ // class ConditionalVersion: Version { - let condition: T -> Bool + let condition: (T) -> Bool - init(name: String, behavior: Version -> Void, condition: T -> Bool) { + init(name: String, behavior: @escaping (Version) -> Void, condition: @escaping (T) -> Bool) { self.condition = condition super.init(name: name, behavior: behavior) } diff --git a/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift b/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift index ec8552b..99b5601 100644 --- a/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift +++ b/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift @@ -6,21 +6,21 @@ // Copyright © 2016 Recruit Marketing Partners Co.,Ltd. All rights reserved. // -extension NSUserDefaults: RandomNumberRepository { - public func ab_getRandomNumberWithKey(key: String) -> Int { - var randomNumber = integerForKey(key) +extension UserDefaults: RandomNumberRepository { + public func ab_getRandomNumberWithKey(_ key: String) -> Int { + var randomNumber = integer(forKey: key) if randomNumber == 0 { randomNumber = generateRandomNumber() - setInteger(randomNumber, forKey: key) + set(randomNumber, forKey: key) } return randomNumber } - public func ab_setRandomNumber(randomNumber: Int, key: String) { - setInteger(randomNumber, forKey: key) + public func ab_setRandomNumber(_ randomNumber: Int, key: String) { + set(randomNumber, forKey: key) } - public func ab_deleteRandomNumberWithKey(key: String) { - removeObjectForKey(key) + public func ab_deleteRandomNumberWithKey(_ key: String) { + removeObject(forKey: key) } } diff --git a/ABKit/Codes/RandomNumberRepository.swift b/ABKit/Codes/RandomNumberRepository.swift index 41642fe..ead6bed 100644 --- a/ABKit/Codes/RandomNumberRepository.swift +++ b/ABKit/Codes/RandomNumberRepository.swift @@ -9,9 +9,9 @@ import Foundation public protocol RandomNumberRepository { - func ab_getRandomNumberWithKey(key: String) -> Int - func ab_setRandomNumber(randomNumber: Int, key: String) - func ab_deleteRandomNumberWithKey(key: String) + func ab_getRandomNumberWithKey(_ key: String) -> Int + func ab_setRandomNumber(_ randomNumber: Int, key: String) + func ab_deleteRandomNumberWithKey(_ key: String) } extension RandomNumberRepository { diff --git a/ABKit/Codes/SplitTest.swift b/ABKit/Codes/SplitTest.swift index cbb57ef..65f9aea 100644 --- a/ABKit/Codes/SplitTest.swift +++ b/ABKit/Codes/SplitTest.swift @@ -8,12 +8,12 @@ import Foundation -public class SplitTest { +open class SplitTest { var versionWeights: [VersionWeight] = [] - private let name: String - private let defaultVersion: Version - private let randomNumberRepository: RandomNumberRepository + fileprivate let name: String + fileprivate let defaultVersion: Version + fileprivate let randomNumberRepository: RandomNumberRepository public init(name: String, defaultVersion: Version, randomNumberRepository: RandomNumberRepository) { self.name = name @@ -22,16 +22,16 @@ public class SplitTest { } public convenience init(name: String, defaultVersion: Version) { - let defaultRepository = NSUserDefaults.standardUserDefaults() - self.init(name: name, defaultVersion: defaultVersion, randomNumberRepository: defaultRepository) + let defaultRepository = UserDefaults.standard + self.init(name: name, defaultVersion: defaultVersion, randomNumberRepository: defaultRepository as RandomNumberRepository) } - public func addVersion(version: Version, weight: Float) { + open func addVersion(_ version: Version, weight: Float) { let versionWeight = VersionWeight(version: version, weight: Int(weight * 100)) versionWeights.append(versionWeight) } - public func run() { + open func run() { assertExcessWeight() calculateWeightRanges() let randomNumber = randomNumberRepository.ab_getRandomNumberWithKey("ABKit-\(name)") @@ -39,22 +39,22 @@ public class SplitTest { version.behavior(version) } - public func setRandomNumber(randomNumber: Int) { + open func setRandomNumber(_ randomNumber: Int) { randomNumberRepository.ab_setRandomNumber(randomNumber, key: "ABKit-\(name)") } - public func deleteRandomNumber() { + open func deleteRandomNumber() { randomNumberRepository.ab_deleteRandomNumberWithKey("ABKit-\(name)") } - private func assertExcessWeight() { + fileprivate func assertExcessWeight() { let totalWeight = versionWeights.reduce(0) { $0 + $1.weight } assert(totalWeight <= 100, "Total weight (\(totalWeight / 100)) must be below 1.0") } - private func calculateWeightRanges() { + fileprivate func calculateWeightRanges() { var weightIndex = 0 - for (index, versionWeight) in versionWeights.enumerate() { + for (index, versionWeight) in versionWeights.enumerated() { let min = weightIndex let max = weightIndex + versionWeight.weight versionWeights[index].weightRange = min.. Version { + fileprivate func selectVersionByRandomNumber(_ randomNumber: Int) -> Version { let versions = versionWeights.filter { $0.contains(randomNumber) }.map { $0.version } return versions.first ?? defaultVersion } diff --git a/ABKit/Codes/Version.swift b/ABKit/Codes/Version.swift index 46ff4f2..623ef9e 100644 --- a/ABKit/Codes/Version.swift +++ b/ABKit/Codes/Version.swift @@ -6,11 +6,11 @@ // Copyright © 2016 Recruit Marketing Partners Co.,Ltd. All rights reserved. // -public class Version { - public let name: String - let behavior: Version -> Void +open class Version { + open let name: String + let behavior: (Version) -> Void - public init(name: String, behavior: Version -> Void) { + public init(name: String, behavior: @escaping (Version) -> Void) { self.name = name self.behavior = behavior } diff --git a/ABKit/Codes/VersionWeight.swift b/ABKit/Codes/VersionWeight.swift index d075736..2b40a16 100644 --- a/ABKit/Codes/VersionWeight.swift +++ b/ABKit/Codes/VersionWeight.swift @@ -9,14 +9,14 @@ class VersionWeight { let version: Version let weight: Int - var weightRange: Range = 0..<100 + var weightRange: CountableRange = 0..<100 init(version: Version, weight: Int) { self.version = version self.weight = weight } - func contains(number: Int) -> Bool { + func contains(_ number: Int) -> Bool { return weightRange.contains(number) } } diff --git a/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift b/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift index e542a51..b8414c9 100644 --- a/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift +++ b/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift @@ -16,7 +16,7 @@ class NSUserDefaultsRandomNumberRepositorySpec: QuickSpec { describe("NSUserDefaults+RandomNumberRepository") { it("ab_getRandomNumberWithKey") { - let defaults = NSUserDefaults.standardUserDefaults() + let defaults = UserDefaults.standard let random = defaults.ab_getRandomNumberWithKey("test") expect(random).to(beGreaterThanOrEqualTo(0)) expect(random).to(beLessThanOrEqualTo(100)) diff --git a/ABKitTests/SplitTestSpec.swift b/ABKitTests/SplitTestSpec.swift index 7317734..a09e9fc 100644 --- a/ABKitTests/SplitTestSpec.swift +++ b/ABKitTests/SplitTestSpec.swift @@ -76,13 +76,13 @@ class SplitTestSpec: QuickSpec { } class TestRandomNumberRepository: RandomNumberRepository { - func ab_getRandomNumberWithKey(key: String) -> Int { + func ab_getRandomNumberWithKey(_ key: String) -> Int { return 1 } - func ab_setRandomNumber(randomNumber: Int, key: String) { + func ab_setRandomNumber(_ randomNumber: Int, key: String) { } - func ab_deleteRandomNumberWithKey(key: String) { + func ab_deleteRandomNumberWithKey(_ key: String) { } } diff --git a/Podfile b/Podfile index 0ea932e..5e3fcaa 100644 --- a/Podfile +++ b/Podfile @@ -3,8 +3,8 @@ use_frameworks! def testing_pods - pod 'Quick', '~> 0.9.0' - pod 'Nimble', '3.0.0' + pod 'Quick', '~> 1.2.0' + pod 'Nimble', '7.0.2' end target 'ABKitTests' do diff --git a/Podfile.lock b/Podfile.lock index 2a27676..5cac8a6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,13 +1,15 @@ PODS: - - Nimble (3.0.0) - - Quick (0.9.1) + - Nimble (7.0.2) + - Quick (1.2.0) DEPENDENCIES: - - Nimble (= 3.0.0) - - Quick (~> 0.9.0) + - Nimble (= 7.0.2) + - Quick (~> 1.2.0) SPEC CHECKSUMS: - Nimble: 4c353d43735b38b545cbb4cb91504588eb5de926 - Quick: a5221fc21788b6aeda934805e68b061839bc3165 + Nimble: bfe1f814edabba69ff145cb1283e04ed636a67f2 + Quick: 58d203b1c5e27fff7229c4c1ae445ad7069a7a08 -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: 2b2bdb038742f71c287eaee01b592732b249696b + +COCOAPODS: 1.3.1