MTGSDKSwift 1.1

MTGSDKSwift 1.1

Eric Internicolarcarson 维护。



  • 作者
  • Reed Carson

MTGSDKSwift

Magic: The Gathering SDK - Swift

一个轻量级框架,使与 magicthegathering.io API 的交互快速、简单且安全。

安装

使用 Cocoapods 安装
  • pod 'MTGSDKSwift' 添加到您的 Podfile 中
  • 运行 pod install
使用Carthage安装
  • 将上述Cartfile复制到您的项目文件夹中
  • 在终端中,切换到您的项目文件夹并运行命令 'carthage update'
  • 将.framework文件拖到Xcode中的项目中。它将位于您的项目目录中新建的Carthage/Build/iOS文件夹中
  • 将框架拖到“链接框架和库”和“嵌入框架”槽中

您也可以直接下载此项目,然后将框架文件拖到项目中,而不是处理Carthage。

使用

import MTGSDKSwift

let magic = Magic()

您可以进行

fetchCards(_:completion:)
fetchSets(_:completion:)
fetchJSON(_:completion:)
fetchImageForCard(_:completion:)
generateBoosterForSet(_:completion:)
首先:配置您的搜索参数

参数可以构建如下

let color = CardSearchParameter(parameterType: .colors, value: "black")
let cmc = CardSearchParameter(parameterType: .cmc, value: "2")
let setCode = CardSearchParameter(parameterType: .set, value: "AER")

搜索参数有两种类型:Card和SetSearchParameter。每个都包含一个枚举,用于存储卡片或集合搜索的有效查询名称。

希望搜索的参数被分组为一个数组,并通过fetch方法传递。

magic.fetchCards(withParameters: [color,cmc,setCode]) {
	cards, error in

	if let error = error {
		//handle your error
	}

	for c in cards! {
		print(c.name)
	}

}

完成包含适当类型的可选数组和可选的错误枚举类型NetworkError。该枚举的详细信息将在下文中阐述。

默认将检索的结果数量为12。这可以设置为100,并且为了获取更多结果,必须增加页码数量。可以通过调用以下内容来设置页码和页面大小:

magic.pageTotal = "1"
//and
magic.pageSize = "9000"

另外,通过调用Magic上的静态方法,可以启用一些有用的控制台消息,例如发送到服务器的URL字符串,检索了多少张卡片或集合,以及表示网络查询已经开始的消息。

Magic.enableLogging = true
获取未解析的JSON

fetchJSON(_:completion:)可用于获取未解析的JSON,以防您想要对它执行特定的操作。

获取卡片图片

fetchImageForCard的工作方式与fetchCards相似,它将检索传递给它的卡片的卡片图片(如果有的话)。一些促销和特别卡片不包含imageURL数据。如果为true,NetworkError将传达这一点。值得注意的是,セットコードが"p"(pMEI、pGMDなど)で先頭が付いているセットのカードにはこのデータが欠けていることがあります。ほとんどのプロモーションカードも画像データが欠けています。

关于图像获取的重要说明:卡片的imageUrl指的是一个HTTP地址(gathere.wizards.com),这自iOS9以来都被App Transport Security默认阻止。为了让图像获取成功,您必须将以下条目粘贴到您的plist中。これもiOS Target Propertiesメニューを通じて追加することもできますが、こちらの方が速いです。StackOverflowには、この問題のより詳細な説明があります。

 <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>wizards.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
        </dict>
    </dict>
模拟加强包

generateBoosterForSet(_:completion:)将返回一个[Card]数组,模拟打开实物加强包可能找到的东西。

类 - Card

public var name: String?
public var names: [String]?
public var manaCost: String?
public var cmc: Int?
public var colors: [String]?
public var colorIdentity: [String]?
public var type: String?
public var supertypes: [String]?
public var types: [String]?
public var subtypes: [String]?
public var rarity: String?
public var set: String?
public var text: String?
public var artist: String?
public var number: String?
public var power: String?
public var toughness: String?
public var layout: String?
public var multiverseid: Int?
public var imageURL: String?
public var rulings: [[String:String]]?
public var foreignNames: [[String:String]]?
public var printings: [String]?
public var originalText: String?
public var originalType: String?
public var id: String?
public var flavor: String?

public static func ==(lhs: Card, rhs: Card) -> Bool {
        return lhs.id == rhs.id
    }

并非所有属性都适用于所有mtg卡片。

ID属性是为所有卡片提供的唯一标识符,例如它对于使Card符合Equatable很有用。Cardの名前は識別子として使用するためには信頼できない:例えば、"Serra Angel"には複数がありますが、どれも印刷ごとに一つずつ、それぞれユニークなIDがあります。

以下为静态函数,用于从包含重复卡片的[Card]数组中筛选出重复卡片,如果您有包含在多版印刷中相同的卡片的多个结果。

FilterResults.removeDuplicateCardsByName(_:) -> [Card]

类 CardSet

public var code: String?
public var name: String?
public var block: String?
public var type: String?
public var border: String?
public var releaseDate: String?
public var magicCardsInfoCode: String?
public var booster: [[String]]?

类 CardSearchParameter,可用参数

case name
case cmc
case colors
case type
case supertypes
case subtypes
case rarity
case text
case set
case artist
case power
case toughness
case multiverseid
case gameFormat
  • 颜色
    • 引号内的 "red,black,white" 将返回精确匹配
    • red,black,white 将包含多彩颜色
    • red|black|white 将不会返回多彩颜色
    • red,black|white 将返回红黑或多彩红白的卡牌

有关预期输入和返回结果的更多信息,请参阅官方API文档 - magicthegathering.io 文档

类 SetSearchParameter,可用参数

case name
case block

枚举 NetworkError

public enum NetworkError: Error {
    case requestError(Error)
    case unexpectedHTTPResponse(HTTPURLResponse)
    case fetchCardImageError(String)
    case miscError(String)
}
  • 情况请求错误(Error)
    • 将包含由dataTask完成生成的错误(如果存在)
  • 情况意外的HTTP响应(HTTPURLResponse)
    • 将包含由dataTask完成生成的HTTP响应(如果生成的是成功状态码200..<300以外的任何状态码)
  • 情况获取卡牌图片错误(String)
    • 相关值将包含有关失败图片获取的信息
  • 情况其他错误(String)
    • 相关值将包含关于诸如构造URL失败等错误的信息

类型别名

public typealias JSONResults = [String:Any]
public typealias JSONCompletionWithError = (JSONResults?, NetworkError?) -> Void
public typealias CardImageCompletion = (UIImage?, NetworkError?) -> Void
public typealias CardCompletion = ([Card]?, NetworkError?) -> Void
public typealias SetCompletion = ([CardSet]?, NetworkError?) -> Void