Skip to content

Commit b049193

Browse files
authored
Merge pull request #196 from ShiWeiCN/jes-Swift3
Convert to swift 3.0
2 parents 110aaaf + b0f44b9 commit b049193

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+289
-271
lines changed

EZSwiftExtensions.xcodeproj/project.pbxproj

+14-1
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@
441441
isa = PBXProject;
442442
attributes = {
443443
LastSwiftUpdateCheck = 0730;
444-
LastUpgradeCheck = 0710;
444+
LastUpgradeCheck = 0800;
445445
ORGANIZATIONNAME = "Goktug Yilmaz";
446446
TargetAttributes = {
447447
B5DC86A81C0ED06700972D0A = {
@@ -703,8 +703,10 @@
703703
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
704704
CLANG_WARN_EMPTY_BODY = YES;
705705
CLANG_WARN_ENUM_CONVERSION = YES;
706+
CLANG_WARN_INFINITE_RECURSION = YES;
706707
CLANG_WARN_INT_CONVERSION = YES;
707708
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
709+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
708710
CLANG_WARN_UNREACHABLE_CODE = YES;
709711
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
710712
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -749,8 +751,10 @@
749751
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
750752
CLANG_WARN_EMPTY_BODY = YES;
751753
CLANG_WARN_ENUM_CONVERSION = YES;
754+
CLANG_WARN_INFINITE_RECURSION = YES;
752755
CLANG_WARN_INT_CONVERSION = YES;
753756
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
757+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
754758
CLANG_WARN_UNREACHABLE_CODE = YES;
755759
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
756760
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -769,6 +773,7 @@
769773
GCC_WARN_UNUSED_VARIABLE = YES;
770774
MTL_ENABLE_DEBUG_INFO = NO;
771775
SDKROOT = iphoneos;
776+
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
772777
VALIDATE_PRODUCT = YES;
773778
VERSIONING_SYSTEM = "apple-generic";
774779
VERSION_INFO_PREFIX = "";
@@ -778,6 +783,7 @@
778783
B5DC86BE1C0ED06700972D0A /* Debug */ = {
779784
isa = XCBuildConfiguration;
780785
buildSettings = {
786+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
781787
DEFINES_MODULE = YES;
782788
DYLIB_COMPATIBILITY_VERSION = 1;
783789
DYLIB_CURRENT_VERSION = 1.0.2;
@@ -797,6 +803,7 @@
797803
B5DC86BF1C0ED06700972D0A /* Release */ = {
798804
isa = XCBuildConfiguration;
799805
buildSettings = {
806+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
800807
DEFINES_MODULE = YES;
801808
DYLIB_COMPATIBILITY_VERSION = 1;
802809
DYLIB_CURRENT_VERSION = 1.0.2;
@@ -838,6 +845,7 @@
838845
CD4D30E11CEEAFD900CB53BC /* Debug */ = {
839846
isa = XCBuildConfiguration;
840847
buildSettings = {
848+
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
841849
DEFINES_MODULE = YES;
842850
DYLIB_COMPATIBILITY_VERSION = 1;
843851
DYLIB_CURRENT_VERSION = 1.0.2;
@@ -849,13 +857,15 @@
849857
PRODUCT_NAME = EZSwiftExtensions;
850858
SDKROOT = appletvos;
851859
SKIP_INSTALL = YES;
860+
SWIFT_VERSION = 3.0;
852861
TVOS_DEPLOYMENT_TARGET = 9.0;
853862
};
854863
name = Debug;
855864
};
856865
CD4D30E21CEEAFD900CB53BC /* Release */ = {
857866
isa = XCBuildConfiguration;
858867
buildSettings = {
868+
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
859869
DEFINES_MODULE = YES;
860870
DYLIB_COMPATIBILITY_VERSION = 1;
861871
DYLIB_CURRENT_VERSION = 1.0.2;
@@ -867,6 +877,7 @@
867877
PRODUCT_NAME = EZSwiftExtensions;
868878
SDKROOT = appletvos;
869879
SKIP_INSTALL = YES;
880+
SWIFT_VERSION = 3.0;
870881
TVOS_DEPLOYMENT_TARGET = 9.0;
871882
};
872883
name = Release;
@@ -879,6 +890,7 @@
879890
PRODUCT_BUNDLE_IDENTIFIER = com.gbf.EZSwiftExtensions.EZSwiftExtensionsTests;
880891
PRODUCT_NAME = EZSwiftExtensionsTest;
881892
SDKROOT = appletvos;
893+
SWIFT_VERSION = 3.0;
882894
};
883895
name = Debug;
884896
};
@@ -890,6 +902,7 @@
890902
PRODUCT_BUNDLE_IDENTIFIER = com.gbf.EZSwiftExtensions.EZSwiftExtensionsTests;
891903
PRODUCT_NAME = EZSwiftExtensionsTest;
892904
SDKROOT = appletvos;
905+
SWIFT_VERSION = 3.0;
893906
};
894907
name = Release;
895908
};

EZSwiftExtensions.xcodeproj/xcshareddata/xcschemes/EZSwiftExtensions-iOS.xcscheme

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0710"
3+
LastUpgradeVersion = "0800"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

EZSwiftExtensionsExample.xcodeproj/project.pbxproj

+16-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
C48E3F661D902B6700ED2DF7 /* NSUserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48E3F651D902B6700ED2DF7 /* NSUserDefaultsExtension.swift */; };
1011
C85840ED1C43B05200595696 /* NSURLExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85840EC1C43B05200595696 /* NSURLExtensions.swift */; };
1112
E15484E41CA2BD00003B030E /* ErrorTypeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15484E31CA2BD00003B030E /* ErrorTypeExtensions.swift */; };
1213
E1587FB01CCA41F400A0B071 /* UISwitchExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1587FAF1CCA41F400A0B071 /* UISwitchExtensions.swift */; };
@@ -54,6 +55,7 @@
5455
/* End PBXBuildFile section */
5556

5657
/* Begin PBXFileReference section */
58+
C48E3F651D902B6700ED2DF7 /* NSUserDefaultsExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NSUserDefaultsExtension.swift; path = Sources/NSUserDefaultsExtension.swift; sourceTree = SOURCE_ROOT; };
5759
C85840EC1C43B05200595696 /* NSURLExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NSURLExtensions.swift; path = Sources/NSURLExtensions.swift; sourceTree = SOURCE_ROOT; };
5860
E15484E31CA2BD00003B030E /* ErrorTypeExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ErrorTypeExtensions.swift; path = Sources/ErrorTypeExtensions.swift; sourceTree = SOURCE_ROOT; };
5961
E1587FAF1CCA41F400A0B071 /* UISwitchExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UISwitchExtensions.swift; path = Sources/UISwitchExtensions.swift; sourceTree = SOURCE_ROOT; };
@@ -121,6 +123,7 @@
121123
E1839E041BF79974002212C6 /* BlockLongPress.swift */,
122124
E1839E051BF79974002212C6 /* BlockPan.swift */,
123125
E1839E061BF79974002212C6 /* BlockPinch.swift */,
126+
C48E3F651D902B6700ED2DF7 /* NSUserDefaultsExtension.swift */,
124127
E1839E071BF79974002212C6 /* BlockSwipe.swift */,
125128
E1839E081BF79974002212C6 /* BlockTap.swift */,
126129
E1839E091BF79974002212C6 /* BlockWebView.swift */,
@@ -216,7 +219,7 @@
216219
E1839DAD1BF79335002212C6 /* Project object */ = {
217220
isa = PBXProject;
218221
attributes = {
219-
LastUpgradeCheck = 0700;
222+
LastUpgradeCheck = 0800;
220223
ORGANIZATIONNAME = "Goktug Yilmaz";
221224
TargetAttributes = {
222225
E1839DB41BF79335002212C6 = {
@@ -271,6 +274,7 @@
271274
E1839E351BF79974002212C6 /* UIImageViewExtensions.swift in Sources */,
272275
E1839E371BF79974002212C6 /* UITextViewExtensions.swift in Sources */,
273276
E1839E2F1BF79974002212C6 /* UIButtonExtensions.swift in Sources */,
277+
C48E3F661D902B6700ED2DF7 /* NSUserDefaultsExtension.swift in Sources */,
274278
E1587FB01CCA41F400A0B071 /* UISwitchExtensions.swift in Sources */,
275279
E1839E301BF79974002212C6 /* UIColoredView.swift in Sources */,
276280
E1839E1E1BF79974002212C6 /* ArrayExtensions.swift in Sources */,
@@ -340,8 +344,10 @@
340344
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
341345
CLANG_WARN_EMPTY_BODY = YES;
342346
CLANG_WARN_ENUM_CONVERSION = YES;
347+
CLANG_WARN_INFINITE_RECURSION = YES;
343348
CLANG_WARN_INT_CONVERSION = YES;
344349
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
350+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
345351
CLANG_WARN_UNREACHABLE_CODE = YES;
346352
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
347353
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -368,6 +374,7 @@
368374
ONLY_ACTIVE_ARCH = YES;
369375
SDKROOT = iphoneos;
370376
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
377+
SWIFT_VERSION = 3.0;
371378
TARGETED_DEVICE_FAMILY = "1,2";
372379
};
373380
name = Debug;
@@ -385,8 +392,10 @@
385392
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
386393
CLANG_WARN_EMPTY_BODY = YES;
387394
CLANG_WARN_ENUM_CONVERSION = YES;
395+
CLANG_WARN_INFINITE_RECURSION = YES;
388396
CLANG_WARN_INT_CONVERSION = YES;
389397
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
398+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
390399
CLANG_WARN_UNREACHABLE_CODE = YES;
391400
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
392401
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -405,6 +414,8 @@
405414
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
406415
MTL_ENABLE_DEBUG_INFO = NO;
407416
SDKROOT = iphoneos;
417+
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
418+
SWIFT_VERSION = 3.0;
408419
TARGETED_DEVICE_FAMILY = "1,2";
409420
VALIDATE_PRODUCT = YES;
410421
};
@@ -414,23 +425,27 @@
414425
isa = XCBuildConfiguration;
415426
buildSettings = {
416427
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
428+
DEVELOPMENT_TEAM = "";
417429
INFOPLIST_FILE = EZSwiftExtensions/Info.plist;
418430
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
419431
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
420432
PRODUCT_BUNDLE_IDENTIFIER = com.gbf.EZSwiftExtensions;
421433
PRODUCT_NAME = EZSwiftExtensionsExample;
434+
SWIFT_VERSION = 3.0;
422435
};
423436
name = Debug;
424437
};
425438
E1839DC91BF79335002212C6 /* Release */ = {
426439
isa = XCBuildConfiguration;
427440
buildSettings = {
428441
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
442+
DEVELOPMENT_TEAM = "";
429443
INFOPLIST_FILE = EZSwiftExtensions/Info.plist;
430444
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
431445
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
432446
PRODUCT_BUNDLE_IDENTIFIER = com.gbf.EZSwiftExtensions;
433447
PRODUCT_NAME = EZSwiftExtensionsExample;
448+
SWIFT_VERSION = 3.0;
434449
};
435450
name = Release;
436451
};

EZSwiftExtensionsExample/AppDelegate.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,34 @@ import UIKit
1212
class AppDelegate: UIResponder, UIApplicationDelegate {
1313
var window: UIWindow?
1414

15-
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
15+
private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
1616
// Override point for customization after application launch.
1717
return true
1818
}
1919

20-
func applicationWillResignActive(application: UIApplication) {
20+
func applicationWillResignActive(_ application: UIApplication) {
2121
// Sent when the application is about to move from active to inactive state.
2222
// This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message)
2323
// or when the user quits the application and it begins the transition to the background state.
2424
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
2525
}
2626

27-
func applicationDidEnterBackground(application: UIApplication) {
27+
func applicationDidEnterBackground(_ application: UIApplication) {
2828
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information
2929
// to restore your application to its current state in case it is terminated later.
3030
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
3131
}
3232

33-
func applicationWillEnterForeground(application: UIApplication) {
33+
func applicationWillEnterForeground(_ application: UIApplication) {
3434
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
3535
}
3636

37-
func applicationDidBecomeActive(application: UIApplication) {
37+
func applicationDidBecomeActive(_ application: UIApplication) {
3838
// Restart any tasks that were paused (or not yet started) while the application was inactive.
3939
// If the application was previously in the background, optionally refresh the user interface.
4040
}
4141

42-
func applicationWillTerminate(application: UIApplication) {
42+
func applicationWillTerminate(_ application: UIApplication) {
4343
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
4444
}
4545
}

EZSwiftExtensionsExample/Assets.xcassets/AppIcon.appiconset/Contents.json

+20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
{
22
"images" : [
3+
{
4+
"idiom" : "iphone",
5+
"size" : "20x20",
6+
"scale" : "2x"
7+
},
8+
{
9+
"idiom" : "iphone",
10+
"size" : "20x20",
11+
"scale" : "3x"
12+
},
313
{
414
"idiom" : "iphone",
515
"size" : "29x29",
@@ -30,6 +40,16 @@
3040
"size" : "60x60",
3141
"scale" : "3x"
3242
},
43+
{
44+
"idiom" : "ipad",
45+
"size" : "20x20",
46+
"scale" : "1x"
47+
},
48+
{
49+
"idiom" : "ipad",
50+
"size" : "20x20",
51+
"scale" : "2x"
52+
},
3353
{
3454
"idiom" : "ipad",
3555
"size" : "29x29",

EZSwiftExtensionsExample/Base.lproj/Main.storyboard

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="16A319" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
33
<dependencies>
44
<deployment identifier="iOS"/>
5-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
6+
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
67
</dependencies>
78
<scenes>
89
<!--View Controller-->
@@ -14,9 +15,9 @@
1415
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
1516
</layoutGuides>
1617
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
17-
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
18+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
1819
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
19-
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
20+
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
2021
</view>
2122
</viewController>
2223
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>

EZSwiftExtensionsTests/EZSwiftExtensionsTestsArray.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ class EZSwiftExtensionsTestsArray: XCTestCase {
139139
let b: [Int]? = [1, 2, 3]
140140
let c: [Int]? = nil
141141

142-
XCTAssertTrue(a! == b!)
143-
XCTAssertFalse(a! == c!)
142+
XCTAssertTrue(a == b)
143+
XCTAssertFalse(a == c)
144144
}
145145

146146
func testShuffle() {

EZSwiftExtensionsTests/EZSwiftExtensionsTestsNSDate.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ class EZSwiftExtensionsTestsNSDate: XCTestCase {
2222
}
2323

2424
func testDateFromString() {
25-
guard let dateFromString = Date(timeInterval: string, since: format) else {
25+
guard let dateFromString = Date(fromString: string, format: format) else {
2626
XCTFail("Date From String Couldn't be initialized.")
2727
return
2828
}
2929
let formatter = DateFormatter()
3030
formatter.dateFormat = format
3131
let dateString = formatter.date(from: string)
3232
XCTAssertEqual(dateFromString, dateString)
33-
XCTAssertNil(Date(timeInterval: wrongDateString, since: format), "Date From String initialized, but source string was invalid.")
33+
XCTAssertNil(Date(fromString: wrongDateString, format: format), "Date From String initialized, but source string was invalid.")
3434
}
3535

3636
func testDateToString() {

EZSwiftExtensionsTests/EZSwiftExtensionsTestsNSURL.swift

+5-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class EZSwiftExtensionsTestsNSURL: XCTestCase {
3535
support = doesSupport
3636
group.leave()
3737
})
38-
group.wait(timeout: DispatchTime.now() + Double(Int64(30 * NSEC_PER_SEC)) / Double(NSEC_PER_SEC))
38+
_ = group.wait(timeout: DispatchTime.now() + Double(Int64(30 * NSEC_PER_SEC)) / Double(NSEC_PER_SEC))
3939
XCTAssertEqual(len, 1024)
4040
XCTAssertEqual(support, true)
4141
}
@@ -48,13 +48,15 @@ class EZSwiftExtensionsTestsNSURL: XCTestCase {
4848

4949
func testFileFunctions() {
5050
// FIXME: Better implementation to address a real existing file url
51-
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
51+
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.libraryDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
5252
let documentsURL = URL(fileURLWithPath: documentsPath)
53+
5354
XCTAssertTrue(documentsURL.fileIsDirectory)
5455
XCTAssertNotNil(documentsURL.fileCreationDate)
5556
XCTAssertNotNil(documentsURL.fileModifiedDate)
5657
XCTAssertTrue(documentsURL.fileIsWritable)
57-
XCTAssertEqual(documentsURL.fileSize, -1)
58+
XCTAssertEqual(documentsURL.fileSizeValue, -1)
59+
5860
}
5961

6062

EZSwiftExtensionsTests/EZSwiftExtensionsTestsString.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ class EZSwiftExtensionsTestsString: XCTestCase {
6464
}
6565

6666
func testContains() {
67-
XCTAssertTrue(string.contains("01"))
68-
XCTAssertTrue(string.contains("01", compareOption: NSString.CompareOptions.anchoredSearch))
69-
XCTAssertFalse(string.contains("12", compareOption: NSString.CompareOptions.anchoredSearch))
70-
XCTAssertFalse(string.contains("h"))
67+
XCTAssertTrue(string.contains(with: "01"))
68+
XCTAssertTrue(string.contains(with: "01", compareOption: .anchored))
69+
XCTAssertFalse(string.contains(with: "12", compareOption: .anchored))
70+
XCTAssertFalse(string.contains(with: "h"))
7171
}
7272

7373
func testConversions() {

0 commit comments

Comments
 (0)