Tag: 字典

使用Swift保存Firebase中的键值字典

这个问题是从Post Array到Swift中的firebase数据库的后续 我正在尝试将一些ingredients保存到recipe ,之后可以检索配料中的全部配方。 看了上面的问题和这个博客文章https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html 。 我能够重新构build我的数据库 这是我的成分词典: { "IngredientDict": { "-KkbWdomTYdpgEDLjC9w": "Eggs", "-KkbWvaa5DT1PY7q7jIs": "Spaghetti", "-KkbaDQ8wYJxR3O2OwKd": "Parmesan" // More possible ingredients } } 这是我的成分数据: { "IngredientData": { "ingredients": { "-KkbWdomTYdpgEDLjC9w": { "name": "Eggs", "uid": "-KkbWdomTYdpgEDLjC9w" }, "-KkbWvaa5DT1PY7q7jIs": { "name": "Spaghetti", "uid": "-KkbWvaa5DT1PY7q7jIs" }, "-KkbaDQ8wYJxR3O2OwKd": { "name": "Parmesan", "uid": "-KkY90e7dAgefc8zH3_F" // More possible ingredients } } […]

iOS / Swift 1.2 NSDictionray / Dictionary上的NSStandardUserDefaults

在“旧”Swift中,我用来注册我的默认值从.plist文件加载,像这样… let prefs = NSBundle.mainBundle().pathForResource("UserDefaults", ofType: "plist"); let dict = NSDictionary(contentsOfFile: prefs!); let defaults:NSDictionary! = dict?.valueForKey("defaults") as! NSDictionary; NSUserDefaults.standardUserDefaults().registerDefaults(defaults); NSUserDefaults.standardUserDefaults().synchronize(); 在Swift 1.2下,我得到错误… 无法使用types为“(NSDictionary!)”的参数列表调用“registerDefaults” 所以,事情已经改变了,Swift不再接受一个NSDictionary作为registerDefaults的一个参数。 那么,如何将我的NSDictionary转换为一个Dictionary对象,因为它们不能再互换?

Swift下标错误

我相信它与可选项有关,但是我正在安全地解开sourceURL,所以我仍然不确定错误在哪里! 我试图访问一个JSON对象的数组的字典值。 但是,我仍然得到“无法find接受提供的参数'下标'重载。 这似乎很简单,但我似乎无法弄清楚! var dictTemp: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &localError) as? NSDictionary var finalURL: String // error line below if let sourceURL = dictTemp[0]["source"]["sourceUrl"] as? NSString { finalURL = sourceURL as String }

MKPinAnnotationView下载的图像(@ 3x)不能用于6+

我在我的应用程序上使用地图,对于引脚删除,我想设置用户的图像,而不是默认引脚。 我正在下载用户图像,并按照我粘贴下面的代码进行设置。 对于不同规模的设备,我使用的图像名称按照设备规模,例如, 1对于非视网膜设备 – pin.png(尺寸30 x 30) 2对于视网膜设备 – pin@2x.png(尺寸60 x 60) 3对于6+设备 – pin@3x.png(尺寸90 x 90) 这里为1和2工作正常和图像负载完美但是对于6 +(3倍规模)它不工作 什么是问题是: 对于6+我下载PIN @ 3X图像,但在地图上它的大小是90×90,应该是30×30。因为它只是适用于从应用程序捆绑使用的图像。 对于pin@2x.png,它工作正常,并显示大小为30 x 30的2x图像。 我也试图通过设置图像的比例而不是解决scheme MKPinAnnotationView:有三种以上的颜色可用吗? 我尽力解释实际问题,如果我错过了任何东西,或者是否需要设置任何东西,任何人都可以指导吗? 码 – (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { MKPinAnnotationView *annotationView = nil; if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } if ([annotation isKindOfClass:[KPAnnotation class]]) { //Custom […]

以协议types为关键字的Swift Dictionary

这里简短的问题: 我得到一个协议protocol SCResourceModel {..}和一个字典,它应该使用这个协议types作为关键字: [SCResourceModel : String] 。 这显然不起作用,因为字典中的关键字必须符合协议Hashable 。 使我的SCResourceModel从SCResourceModelinheritance或尝试像这样[protocol<SCResourceModel, Hashable> : String]显然不能正常工作,因为Hashable或Equatable只能用作通用约束,而不是作为types本身。 我观看了WWDC 2015,并且在Swift 2.0中,可以将约束添加到如下协议: protocol SCResourceModel where Self: Hashable {..}直接解决了这个问题(非常好)。 无论如何,我的问题是:我可以做一些类似的当前Swift 1.2版本,并以某种方式使用此协议作为字典的关键? 或者任何人都可以提出一个很好的解决方法或其他我可能忽略的东西? 我目前看到的Swift 1.2的唯一解决scheme是将协议转换为inheritance自NSObject的类,并且必须在我的API中进一步使用。 谢谢你的帮助!

Swift Dictionary荒谬的内存使用

我在其中一个应用程序中遇到了一个有趣的问题。 当多次访问Dictionary ,我的应用程序的高速caching的内存使用量在几秒钟内就超过了千兆字节。 这里是一些示例代码来显示问题。 override func viewDidLoad() { let dictionary = ["key1":"value1"] let nsKey: NSString = "key1" let swiftKey = nsKey as String for _ in 0 … 10000000 { dictionary[swiftKey] } } 反复访问字典会导致内存爬升,直到循环结束。 我看着仪器,看到了很多string分配。 原来使用NSString是这个问题。 将nsKey更改为像这样的swift String修复了这个问题: let nsKey = "key1" 还将字典更改为NSDictionary可以解决此问题: let dictionary: NSDictionary = ["key1":"value1"] 有谁知道为什么访问字典使用铸造的NSString导致如此多的堆分配,除了上面描述的还有其他修复吗? 这里有一些照片。 它看起来像幕后的string正在被分配和设置为autorelease (或者我读取错误的数据?)这可能是为什么内存使用不断分配,然后在以后的时间stream失? 如果这是真的,这应该被视为一个“错误”? 这个问题发生在OS X和iOS上。

如何检测在MapView中select了哪个注释

我在地图中做了一些注释,当我点击它们时,我看到了一些信息,而且我有一个打开地图的button,并且我不能接受的正确信息应该画出我的路线。 这是我的代码: 我有我的纬度和经度的双数组的2我从我的查询填充他们。 var lat = [Double]() var lon = [Double]() 这些行用于填充注释 self.annot = Islands(title: object["name"] as! String, subtitle: object["address"] as! String, coordinate: CLLocationCoordinate2D(latitude: (position?.latitude)!, longitude: (position?.longitude)!), info: object["address"] as! String) self.map.addAnnotations([self.annot]) 这是注释创build的地方: func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { let identifier = "pin" if annotation.isKindOfClass(MKUserLocation) { return nil } let image = […]

iOS 5中的“定义”编辑菜单项的select器

我正在build立自己的自定义编辑菜单(UIMenuController),并使用典型的 -(BOOL)canPerformAction:(SEL)action withSender(id)sender 方法来有条件地启用/禁用系统默认值。 典型的编辑方法有很好的logging(copy :, cut :,等等),但是我找不到任何有关“Define”菜单选项调用什么方法来提取iOS 5中的新单词词典的问题。隐藏在明显的视野中,但我花了几个小时寻找它,所以我会很感激任何帮助。 具体来说,我需要: if (action == @selector(defineWord:)) …… 但是给我一个真正代替“defineWord”的地方: PS – 我不介意知道该方法属于什么类,只是出于好奇(例如,复制:属于UIResponderStandardEditActions)

添加到Array时无法推断通用参数“元素”

我有一个数组字典: var myDict : [String:[SomeObj]] = [:] 为了填充它,我尝试在正确的索引处向数组添加一个值。 如果数组不存在,则失败,并在该索引处创build一个新数组: if myDict[key]?.append(val) == nil { myDict[key] = [val] } 我想我应该能够缩短这个: myDict[key]?.append(val) ?? myDict[key] = [val] 但是,而是我得到的错误: Generic parameter 'Element' could not be inferred 。 为什么?

从字典中删除嵌套的密钥

假设我有一个相当复杂的词典,就像这样: let dict: [String: Any] = [ "countries": [ "japan": [ "capital": [ "name": "tokyo", "lat": "35.6895", "lon": "139.6917" ], "language": "japanese" ] ], "airports": [ "germany": ["FRA", "MUC", "HAM", "TXL"] ] ] 我可以访问所有的领域, if let ..块可选地铸造的东西,我可以使用,在阅读时。 不过,我目前正在编写unit testing,我需要以多种方式select性地打破字典。 但我不知道如何优雅地从字典中删除键。 例如,我想在一个testing中删除关键"japan" ,在下一个"lat"应该是零。 这是我目前的实现去除"lat" : if var countries = dict["countries"] as? [String: Any], var japan = […]