From 3e0acf4735edd646b81de884fabef657e365c332 Mon Sep 17 00:00:00 2001 From: Ferenc Kiss Date: Sun, 24 Apr 2016 19:57:57 +0200 Subject: [PATCH 1/2] I need to access all UIBezierPath. Please merge with this. --- SwiftSVG/UIBezierPath+SVG.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/SwiftSVG/UIBezierPath+SVG.swift b/SwiftSVG/UIBezierPath+SVG.swift index 9851ff0..cac6c70 100644 --- a/SwiftSVG/UIBezierPath+SVG.swift +++ b/SwiftSVG/UIBezierPath+SVG.swift @@ -42,6 +42,10 @@ extension UIBezierPath { public class func pathWithSVGURL(SVGURL: NSURL) -> UIBezierPath? { let parser = SVGParser(SVGURL: SVGURL, containerLayer: nil, shouldParseSinglePathOnly: true) return parser.paths.first - } - + } + + public class func pathsWithSVGURL(SVGURL: NSURL) -> [UIBezierPath] { + let parser = SVGParser(SVGURL: SVGURL, containerLayer: nil, shouldParseSinglePathOnly: true) + return parser.paths + } } \ No newline at end of file From 27c053812aa74b5e17e93579ac2f1eb6bec38e1e Mon Sep 17 00:00:00 2001 From: Ferenc Kiss Date: Tue, 30 Aug 2016 12:01:43 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Felfriss=C3=ADtve=20a=20k=C3=B3d=20Swift=20?= =?UTF-8?q?3.0-ra=20=C3=A9s=20iOS10-re.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SwiftSVG.xcodeproj/project.pbxproj | 16 ++- .../xcschemes/SwiftSVGMac.xcscheme | 2 +- .../xcschemes/SwiftSVGiOS.xcscheme | 2 +- SwiftSVG/CAShapeLayer+SVG.swift | 4 +- SwiftSVG/Dictionary+KeyForValue.swift | 4 +- SwiftSVG/NSObject+Extensions.swift | 8 +- SwiftSVG/SVGParser.swift | 16 +-- SwiftSVG/SVGView.swift | 4 +- SwiftSVG/Stack.swift | 4 +- SwiftSVG/String+SVG.swift | 130 +++++++++--------- SwiftSVG/String+Subscript.swift | 6 +- SwiftSVG/UIBezierPath+SVG.swift | 8 +- SwiftSVG/UIColor+Extensions.swift | 9 +- SwiftSVG/UIView+SVG.swift | 4 +- 14 files changed, 117 insertions(+), 100 deletions(-) diff --git a/SwiftSVG.xcodeproj/project.pbxproj b/SwiftSVG.xcodeproj/project.pbxproj index 28cee9b..22bdb04 100644 --- a/SwiftSVG.xcodeproj/project.pbxproj +++ b/SwiftSVG.xcodeproj/project.pbxproj @@ -292,7 +292,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Strauss LLC"; TargetAttributes = { 396A8E431B3D2036001986AF = { @@ -303,6 +303,7 @@ }; 39B8D88B1B3C3283009DAF60 = { CreatedOnToolsVersion = 6.3.2; + LastSwiftMigration = 0800; }; }; }; @@ -460,6 +461,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -505,12 +507,14 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.sixpolys.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; 39B8D89F1B3C3284009DAF60 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; @@ -529,6 +533,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.straussmade.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -538,6 +543,7 @@ 39B8D8A01B3C3284009DAF60 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -553,6 +559,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.straussmade.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -572,8 +580,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -582,6 +592,7 @@ ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -615,8 +626,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -624,6 +637,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; diff --git a/SwiftSVG.xcodeproj/xcshareddata/xcschemes/SwiftSVGMac.xcscheme b/SwiftSVG.xcodeproj/xcshareddata/xcschemes/SwiftSVGMac.xcscheme index 698a20e..2ad35c6 100644 --- a/SwiftSVG.xcodeproj/xcshareddata/xcschemes/SwiftSVGMac.xcscheme +++ b/SwiftSVG.xcodeproj/xcshareddata/xcschemes/SwiftSVGMac.xcscheme @@ -1,6 +1,6 @@ (dict: [K: V], valueToMatch: V) -> [K]? { +public func allKeysForValue(_ dict: [K: V], valueToMatch: V) -> [K]? { let possibleValues = dict.filter ({ (key, value) -> Bool in return value == valueToMatch @@ -49,4 +49,4 @@ public func allKeysForValue(dict: [K: V], valueToMatch: V) -> [ return possibleValues } return nil -} \ No newline at end of file +} diff --git a/SwiftSVG/NSObject+Extensions.swift b/SwiftSVG/NSObject+Extensions.swift index 777bb54..1d3c3b1 100644 --- a/SwiftSVG/NSObject+Extensions.swift +++ b/SwiftSVG/NSObject+Extensions.swift @@ -55,14 +55,14 @@ extension NSObject { // iterate each objc_property_t struct for i in 0..() @@ -72,7 +72,7 @@ public class SVGParser : NSObject, NSXMLParserDelegate { public var shouldParseSinglePathOnly = false internal var paths = [UIBezierPath]() - convenience init(SVGURL: NSURL, containerLayer: CALayer? = nil, shouldParseSinglePathOnly: Bool = false) { + convenience init(SVGURL: URL, containerLayer: CALayer? = nil, shouldParseSinglePathOnly: Bool = false) { self.init() @@ -80,7 +80,7 @@ public class SVGParser : NSObject, NSXMLParserDelegate { self.containerLayer = layer } - if let xmlParser = NSXMLParser(contentsOfURL: SVGURL) { + if let xmlParser = XMLParser(contentsOf: SVGURL) { xmlParser.delegate = self xmlParser.parse() } else { @@ -88,7 +88,7 @@ public class SVGParser : NSObject, NSXMLParserDelegate { } } - public func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { + public func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { if let newElement = tagMapping[elementName] { @@ -119,11 +119,11 @@ public class SVGParser : NSObject, NSXMLParserDelegate { } - public func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { + public func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if let lastItem = self.elementStack.last { if let keyForValue = allKeysForValue(tagMapping,valueToMatch: lastItem.classNameAsString())?.first { if elementName == keyForValue { - self.elementStack.pop() + _ = self.elementStack.pop() } } } diff --git a/SwiftSVG/SVGView.swift b/SwiftSVG/SVGView.swift index 8652e81..3d173f1 100644 --- a/SwiftSVG/SVGView.swift +++ b/SwiftSVG/SVGView.swift @@ -42,12 +42,12 @@ public class SVGView : UIView { if let thisName = SVGName { #if !TARGET_INTERFACE_BUILDER - let bundle = NSBundle.mainBundle() + let bundle = Bundle.main #else let bundle = NSBundle(forClass: self.dynamicType) #endif - if let url = bundle.URLForResource(thisName, withExtension: "svg") { + if let url = bundle.url(forResource: thisName, withExtension: "svg") { self.shapeLayer = CAShapeLayer(SVGURL: url) if self.shapeLayer.superlayer == nil { self.nonOptionalLayer.addSublayer(self.shapeLayer) diff --git a/SwiftSVG/Stack.swift b/SwiftSVG/Stack.swift index bad6875..d70798e 100644 --- a/SwiftSVG/Stack.swift +++ b/SwiftSVG/Stack.swift @@ -41,7 +41,7 @@ import Foundation struct Stack { var items = [T]() - mutating func push(itemToPush: T) { + mutating func push(_ itemToPush: T) { self.items.append(itemToPush) } @@ -74,4 +74,4 @@ extension Stack { return nil } } -} \ No newline at end of file +} diff --git a/SwiftSVG/String+SVG.swift b/SwiftSVG/String+SVG.swift index 10a74a3..2634efb 100644 --- a/SwiftSVG/String+SVG.swift +++ b/SwiftSVG/String+SVG.swift @@ -37,7 +37,7 @@ // MARK: Type Definitions private enum PathType { - case Absolute, Relative + case absolute, relative } private struct NumberStack { @@ -65,7 +65,7 @@ private struct NumberStack { self.characterStack = String(startCharacter) } - mutating func push(character: Character) { + mutating func push(_ character: Character) { self.characterStack += String(character) } @@ -85,7 +85,7 @@ private struct PreviousCommand { private protocol Commandable { var numberOfRequiredParameters: Int { get } - func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand?) + func execute(forPath: UIBezierPath, previousCommand: PreviousCommand?) } ///////////////////////////////////////////////////// @@ -112,7 +112,7 @@ private class PathCommand : PathCharacter, Commandable { return 0 } } - var pathType: PathType = .Absolute + var pathType: PathType = .absolute var parameters: [CGFloat] = Array() var path: UIBezierPath = UIBezierPath() @@ -127,7 +127,7 @@ private class PathCommand : PathCharacter, Commandable { self.pathType = pathType } - func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { assert(false, "Subclasses must implement this method") } @@ -148,23 +148,23 @@ private class PathCommand : PathCharacter, Commandable { return true } - func pushCoordinateAndExecuteIfPossible(coordinate: CGFloat, previousCommand: PreviousCommand? = nil) -> PreviousCommand? { + func pushCoordinateAndExecuteIfPossible(_ coordinate: CGFloat, previousCommand: PreviousCommand? = nil) -> PreviousCommand? { self.parameters.append(coordinate) if self.canExecute() { self.execute(forPath: self.path, previousCommand: previousCommand) let returnParameters = self.parameters - self.parameters.removeAll(keepCapacity: false) + self.parameters.removeAll(keepingCapacity: false) return PreviousCommand(commandLetter: String(self.character!), parameters: returnParameters) } return nil } - func pointForPathType(point: CGPoint) -> CGPoint { + func pointForPathType(_ point: CGPoint) -> CGPoint { switch self.pathType { - case .Absolute: + case .absolute: return point - case .Relative: - return CGPointMake(point.x + self.path.currentPoint.x, point.y + self.path.currentPoint.y) + case .relative: + return CGPoint(x: point.x + self.path.currentPoint.x, y: point.y + self.path.currentPoint.y) } } } @@ -181,9 +181,9 @@ private class MoveTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { - let point = self.pointForPathType(CGPointMake(self.parameters[0], self.parameters[1])) - forPath.moveToPoint(point) + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + let point = self.pointForPathType(CGPoint(x: self.parameters[0], y: self.parameters[1])) + forPath.move(to: point) } } @@ -195,8 +195,8 @@ private class ClosePath : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { - forPath.closePath() + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + forPath.close() } } @@ -208,9 +208,9 @@ private class LineTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { - let point = self.pointForPathType(CGPointMake(self.parameters[0], self.parameters[1])) - forPath.addLineToPoint(point) + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + let point = self.pointForPathType(CGPoint(x: self.parameters[0], y: self.parameters[1])) + forPath.addLine(to: point) } } @@ -222,10 +222,10 @@ private class HorizontalLineTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { let x = self.parameters[0] - let point = (self.pathType == PathType.Absolute ? CGPointMake(x, forPath.currentPoint.y) : CGPointMake(forPath.currentPoint.x + x, forPath.currentPoint.y)) - forPath.addLineToPoint(point) + let point = (self.pathType == PathType.absolute ? CGPoint(x: x, y: forPath.currentPoint.y) : CGPoint(x: forPath.currentPoint.x + x, y: forPath.currentPoint.y)) + forPath.addLine(to: point) } } @@ -237,10 +237,10 @@ private class VerticalLineTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { let y = self.parameters[0] - let point = (self.pathType == PathType.Absolute ? CGPointMake(forPath.currentPoint.x, y) : CGPointMake(forPath.currentPoint.x, forPath.currentPoint.y + y)) - forPath.addLineToPoint(point) + let point = (self.pathType == PathType.absolute ? CGPoint(x: forPath.currentPoint.x, y: y) : CGPoint(x: forPath.currentPoint.x, y: forPath.currentPoint.y + y)) + forPath.addLine(to: point) } } @@ -252,11 +252,11 @@ private class CurveTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { - let startControl = self.pointForPathType(CGPointMake(self.parameters[0], self.parameters[1])) - let endControl = self.pointForPathType(CGPointMake(self.parameters[2], self.parameters[3])) - let point = self.pointForPathType(CGPointMake(self.parameters[4], self.parameters[5])) - forPath.addCurveToPoint(point, controlPoint1: startControl, controlPoint2: endControl) + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + let startControl = self.pointForPathType(CGPoint(x: self.parameters[0], y: self.parameters[1])) + let endControl = self.pointForPathType(CGPoint(x: self.parameters[2], y: self.parameters[3])) + let point = self.pointForPathType(CGPoint(x: self.parameters[4], y: self.parameters[5])) + forPath.addCurve(to: point, controlPoint1: startControl, controlPoint2: endControl) } } @@ -268,12 +268,12 @@ private class SmoothCurveTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { if let previousParams = previousCommand?.parameters { - let point = self.pointForPathType(CGPointMake(self.parameters[2], self.parameters[3])) - let controlEnd = self.pointForPathType(CGPointMake(self.parameters[0], self.parameters[1])) + let point = self.pointForPathType(CGPoint(x: self.parameters[2], y: self.parameters[3])) + let controlEnd = self.pointForPathType(CGPoint(x: self.parameters[0], y: self.parameters[1])) let currentPoint = forPath.currentPoint @@ -287,14 +287,14 @@ private class SmoothCurveTo : PathCommand { controlStartX = (2.0 * currentPoint.x) - previousParams[2] controlStartY = (2.0 * currentPoint.y) - previousParams[3] case "c": - let oldCurrentPoint = CGPointMake(currentPoint.x - previousParams[4], currentPoint.y - previousParams[5]) + let oldCurrentPoint = CGPoint(x: currentPoint.x - previousParams[4], y: currentPoint.y - previousParams[5]) controlStartX = (2.0 * currentPoint.x) - (previousParams[2] + oldCurrentPoint.x) controlStartY = (2.0 * currentPoint.y) - (previousParams[3] + oldCurrentPoint.y) case "S": controlStartX = (2.0 * currentPoint.x) - previousParams[0] controlStartY = (2.0 * currentPoint.y) - previousParams[1] case "s": - let oldCurrentPoint = CGPointMake(currentPoint.x - previousParams[2], currentPoint.y - previousParams[3]) + let oldCurrentPoint = CGPoint(x: currentPoint.x - previousParams[2], y: currentPoint.y - previousParams[3]) controlStartX = (2.0 * currentPoint.x) - (previousParams[0] + oldCurrentPoint.x) controlStartY = (2.0 * currentPoint.y) - (previousParams[1] + oldCurrentPoint.y) default: @@ -305,7 +305,7 @@ private class SmoothCurveTo : PathCommand { assert(false, "Must supply previous command for SmoothCurveTo") } - forPath.addCurveToPoint(point, controlPoint1: CGPointMake(controlStartX, controlStartY), controlPoint2: controlEnd) + forPath.addCurve(to: point, controlPoint1: CGPoint(x: controlStartX, y: controlStartY), controlPoint2: controlEnd) } else { assert(false, "Must supply previous parameters for SmoothCurveTo") @@ -321,10 +321,10 @@ private class QuadraticCurveTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { - let controlPoint = self.pointForPathType(CGPointMake(self.parameters[0], self.parameters[1])) - let point = self.pointForPathType(CGPointMake(self.parameters[2], self.parameters[3])) - forPath.addQuadCurveToPoint(point, controlPoint: controlPoint) + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + let controlPoint = self.pointForPathType(CGPoint(x: self.parameters[0], y: self.parameters[1])) + let point = self.pointForPathType(CGPoint(x: self.parameters[2], y: self.parameters[3])) + forPath.addQuadCurve(to: point, controlPoint: controlPoint) } } @@ -336,11 +336,11 @@ private class SmoothQuadraticCurveTo : PathCommand { } } - override func execute(forPath forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { + override func execute(forPath: UIBezierPath, previousCommand: PreviousCommand? = nil) { if let previousParams = previousCommand?.parameters { - let point = self.pointForPathType(CGPointMake(self.parameters[0], self.parameters[1])) + let point = self.pointForPathType(CGPoint(x: self.parameters[0], y: self.parameters[1])) var controlPoint = forPath.currentPoint if let previousChar = previousCommand?.commandLetter { @@ -349,10 +349,10 @@ private class SmoothQuadraticCurveTo : PathCommand { switch previousChar { case "Q": - controlPoint = CGPointMake((2.0 * currentPoint.x) - previousParams[0], (2.0 * currentPoint.y) - previousParams[1]) + controlPoint = CGPoint(x: (2.0 * currentPoint.x) - previousParams[0], y: (2.0 * currentPoint.y) - previousParams[1]) case "q": - let oldCurrentPoint = CGPointMake(currentPoint.x - previousParams[2], currentPoint.y - previousParams[3]) - controlPoint = CGPointMake((2.0 * currentPoint.x) - (previousParams[0] + oldCurrentPoint.x), (2.0 * currentPoint.y) - (previousParams[1] + oldCurrentPoint.y)) + let oldCurrentPoint = CGPoint(x: currentPoint.x - previousParams[2], y: currentPoint.y - previousParams[3]) + controlPoint = CGPoint(x: (2.0 * currentPoint.x) - (previousParams[0] + oldCurrentPoint.x), y: (2.0 * currentPoint.y) - (previousParams[1] + oldCurrentPoint.y)) default: break } @@ -361,7 +361,7 @@ private class SmoothQuadraticCurveTo : PathCommand { assert(false, "Must supply previous command for SmoothQuadraticCurveTo") } - forPath.addQuadCurveToPoint(point, controlPoint: controlPoint) + forPath.addQuadCurve(to: point, controlPoint: controlPoint) } else { assert(false, "Must supply previous parameters for SmoothQuadraticCurveTo") @@ -375,24 +375,24 @@ private class SmoothQuadraticCurveTo : PathCommand { // MARK: Character Dictionary private let characterDictionary: [Character: PathCharacter] = [ - "M": MoveTo(character: "M", pathType: PathType.Absolute), - "m": MoveTo(character: "m", pathType: PathType.Relative), - "C": CurveTo(character: "C", pathType: PathType.Absolute), - "c": CurveTo(character: "c", pathType: PathType.Relative), - "S": SmoothCurveTo(character: "S", pathType: PathType.Absolute), - "s": SmoothCurveTo(character: "s", pathType: PathType.Relative), - "L": LineTo(character: "L", pathType: PathType.Absolute), - "l": LineTo(character: "l", pathType: PathType.Relative), - "H": HorizontalLineTo(character: "H", pathType: PathType.Absolute), - "h": HorizontalLineTo(character: "h", pathType: PathType.Relative), - "V": VerticalLineTo(character: "V", pathType: PathType.Absolute), - "v": VerticalLineTo(character: "v", pathType: PathType.Relative), - "Q": QuadraticCurveTo(character: "Q", pathType: PathType.Absolute), - "q": QuadraticCurveTo(character: "q", pathType: PathType.Relative), - "T": SmoothQuadraticCurveTo(character: "T", pathType: PathType.Absolute), - "t": SmoothQuadraticCurveTo(character: "t", pathType: PathType.Relative), - "Z": ClosePath(character: "Z", pathType: PathType.Absolute), - "z": ClosePath(character: "z", pathType: PathType.Relative), + "M": MoveTo(character: "M", pathType: PathType.absolute), + "m": MoveTo(character: "m", pathType: PathType.relative), + "C": CurveTo(character: "C", pathType: PathType.absolute), + "c": CurveTo(character: "c", pathType: PathType.relative), + "S": SmoothCurveTo(character: "S", pathType: PathType.absolute), + "s": SmoothCurveTo(character: "s", pathType: PathType.relative), + "L": LineTo(character: "L", pathType: PathType.absolute), + "l": LineTo(character: "l", pathType: PathType.relative), + "H": HorizontalLineTo(character: "H", pathType: PathType.absolute), + "h": HorizontalLineTo(character: "h", pathType: PathType.relative), + "V": VerticalLineTo(character: "V", pathType: PathType.absolute), + "v": VerticalLineTo(character: "v", pathType: PathType.relative), + "Q": QuadraticCurveTo(character: "Q", pathType: PathType.absolute), + "q": QuadraticCurveTo(character: "q", pathType: PathType.relative), + "T": SmoothQuadraticCurveTo(character: "T", pathType: PathType.absolute), + "t": SmoothQuadraticCurveTo(character: "t", pathType: PathType.relative), + "Z": ClosePath(character: "Z", pathType: PathType.absolute), + "z": ClosePath(character: "z", pathType: PathType.relative), "-": SignCharacter(character: "-"), ".": NumberCharacter(character: "."), "0": NumberCharacter(character: "0"), @@ -428,7 +428,7 @@ public extension String { } } -func parseSVGPath(pathString: String, forPath: UIBezierPath? = nil) -> UIBezierPath { +func parseSVGPath(_ pathString: String, forPath: UIBezierPath? = nil) -> UIBezierPath { assert(pathString.hasPrefix("M") || pathString.hasPrefix("m"), "Path d attribute must begin with MoveTo Command (\"M\")") diff --git a/SwiftSVG/String+Subscript.swift b/SwiftSVG/String+Subscript.swift index 310808e..a5aa6d3 100644 --- a/SwiftSVG/String+Subscript.swift +++ b/SwiftSVG/String+Subscript.swift @@ -46,14 +46,14 @@ public extension String { subscript(index: Int) -> Character { get { - let index = self.startIndex.advancedBy(index) + let index = self.characters.index(self.startIndex, offsetBy: index) return self[index] } } subscript(integerRange: Range) -> String { - let start = self.startIndex.advancedBy(integerRange.startIndex) - let end = self.startIndex.advancedBy(integerRange.endIndex) + let start = self.characters.index(self.startIndex, offsetBy: integerRange.lowerBound) + let end = self.characters.index(self.startIndex, offsetBy: integerRange.upperBound) let range = start.. UIBezierPath? { + public class func pathWithSVGURL(_ SVGURL: URL) -> UIBezierPath? { let parser = SVGParser(SVGURL: SVGURL, containerLayer: nil, shouldParseSinglePathOnly: true) return parser.paths.first } - public class func pathsWithSVGURL(SVGURL: NSURL) -> [UIBezierPath] { + public class func pathsWithSVGURL(_ SVGURL: URL) -> [UIBezierPath] { let parser = SVGParser(SVGURL: SVGURL, containerLayer: nil, shouldParseSinglePathOnly: true) return parser.paths } -} \ No newline at end of file +} diff --git a/SwiftSVG/UIColor+Extensions.swift b/SwiftSVG/UIColor+Extensions.swift index 82be6b3..4acd887 100644 --- a/SwiftSVG/UIColor+Extensions.swift +++ b/SwiftSVG/UIColor+Extensions.swift @@ -56,9 +56,12 @@ public extension UIColor { var hexBlue = "00" if workingString.characters.count == 6 { - hexRed = workingString[0...1] - hexGreen = workingString[2...3] - hexBlue = workingString[4...5] + var range = workingString.startIndex ..< workingString.index(workingString.startIndex, offsetBy: 2) + hexRed = workingString.substring(with: range) + range = workingString.index(workingString.startIndex, offsetBy: 2) ..< workingString.index(workingString.startIndex, offsetBy: 4) + hexGreen = workingString.substring(with: range) + range = workingString.index(workingString.startIndex, offsetBy: 4) ..< workingString.index(workingString.startIndex, offsetBy: 6) + hexBlue = workingString.substring(with: range) } else if workingString.characters.count == 3 { let redValue = workingString[0] let greenValue = workingString[1] diff --git a/SwiftSVG/UIView+SVG.swift b/SwiftSVG/UIView+SVG.swift index d75bbdc..c769396 100644 --- a/SwiftSVG/UIView+SVG.swift +++ b/SwiftSVG/UIView+SVG.swift @@ -40,9 +40,9 @@ extension UIView { self.nonOptionalLayer.addSublayer(shapeLayer) } - public convenience init(SVGURL: NSURL) { + public convenience init(SVGURL: URL) { self.init() let shapeLayer = CAShapeLayer(SVGURL: SVGURL) self.nonOptionalLayer.addSublayer(shapeLayer) } -} \ No newline at end of file +}