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