我想枚举Swift中的数组,并删除某些项目.我想知道这是否安全,如果没有,我应该如何做到这一点.
目前,我会这样做:
for (index, aString: String) in enumerate(array) {
//Some of the strings...
array.removeAtIndex(index)
}
Run Code Online (Sandbox Code Playgroud) 我需要找出字符串中的字符是否是表情符号.
例如,我有这个角色:
let string = ""
let character = Array(string)[0]
Run Code Online (Sandbox Code Playgroud)
我需要弄清楚那个角色是不是表情符号.
我NSJSONSerialization这样使用:
let twData: AnyObject? = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableLeaves, error: &dataError)
Run Code Online (Sandbox Code Playgroud)
这给了我一个AnyObject?.
从这里,我想将其转换为 Array<Dictionary<String,String>>
我已经尝试了各种各样的,导致这个:
var twDataArray: Array<Dictionary<String,String>>? = twData? as? Array<Dictionary<String,String>>
Run Code Online (Sandbox Code Playgroud)
这只是给出了错误:
类型'Array>'不符合协议'AnyObject'.
并提出更简单的版本:
var twDataArray = twData as Array
Run Code Online (Sandbox Code Playgroud)
给出错误:
无法转换表达式的类型'AnyObject?' 输入'Array'
我在我的XCode项目中添加了一个新的测试目标.我的项目有Swift代码和Objective-C代码,并有一个桥接头.在将桥接头添加到UnitTesting的构建设置或执行操作时import MyTarget,我收到错误:
failed to import bridging header
我试过了:
defines modules到Yes.我也试过制作一个样本项目,它构建并且运行良好.把我所拥有的一切都带到一个干净的新项目中,这不是一个选择.
我有一些代码,我在非常类似的情况下运行.这是第一个情况,我有imdb_id一部电影我想要的细节:
url = "http://mymovieapi.com/?id=#{self.imdb_id}&type=json&plot=none&episode=0&lang=en-US&aka=simple&release=simple&business=0&tech=0"
doc = Hpricot(open(url)).to_s
json = JSON.parse(doc)
puts json
puts json["imdb_id"]
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果:
{"rating_count"=>493949,
"genres"=>["Drama", "Romance"],
"rated"=>"PG-13",
"language"=>["English", "French", "German", "Swedish", "Italian", "Russian"],
"rating"=>7.6,
"country"=>["USA"],
"release_date"=>19980403,
"title"=>"Titanic",
"year"=>1997,
"filming_locations"=>"Santa Clarita, California, USA",
"imdb_id"=>"tt0120338",
"directors"=>["James Cameron"],
"writers"=>["James Cameron"],
"actors"=>["Leonardo DiCaprio", "Kate Winslet", "Billy Zane", "Kathy Bates", "Frances Fisher", "Gloria Stuart", "Bill Paxton", "Bernard Hill", "David Warner", "Victor Garber", "Jonathan Hyde", "Suzy Amis", "Lewis Abernathy", "Nicholas Cascone", "Anatoly M. Sagalevitch"],
"also_known_as"=>["Tai tan ni ke hao"],
"poster"=>{"imdb"=>"http://ia.media-imdb.com/images/M/MV5BMjExNzM0NDM0N15BMl5BanBnXkFtZTcwMzkxOTUwNw@@._V1_SY317_CR0,0,214,317_.jpg", "cover"=>"http://imdb-poster.b0.upaiyun.com/000/120/338.jpg!cover?_upt=66ac07591382594194"},
"runtime"=>["194 …Run Code Online (Sandbox Code Playgroud) 我通过TestFlight分发了我的应用程序版本1.0,构建1,一切都运行良好.
昨天我存档并发送了构建2,现在点击更新按钮,每个用户似乎都收到错误:
无法下载应用程序
此时无法安装[应用程序名称]
我没有收到任何已经安装过build 1的用户的消息,但是看看iTunes Connect,没有用户安装了build 2.
我想将给定的块添加到数组中,然后在请求时运行数组中包含的所有块.我有类似这样的代码:
class MyArrayBlockClass {
private var blocksArray: Array<() -> Void> = Array()
private let blocksQueue: NSOperationQueue()
func addBlockToArray(block: () -> Void) {
self.blocksArray.append(block)
}
func runBlocksInArray() {
for block in self.blocksArray {
let operation = NSBlockOperation(block: block)
self.blocksQueue.addOperation(operation)
}
self.blocksQueue.removeAll(keepCapacity: false)
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于可以跨多个线程调用addBlockToArray.发生的事情是addBlockToArray在不同的线程中快速连续调用,并且只附加其中一个项目,因此在runBlocksInArray期间不会调用另一个项目.
我尝试过这样的东西,但似乎不起作用:
private let blocksDispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
func addBlockToArray(block: () -> Void) {
dispatch_async(blocksDispatchQueue) {
self.blocksArray.append(block)
}
}
Run Code Online (Sandbox Code Playgroud) arrays multithreading read-write grand-central-dispatch swift
我有一个表格视图,每个单元格有可能有自己的高度,因此不适合使用rowHeight.相反,现在我正在使用let indexSet = NSIndexSet(index: 10),而且self.tableView.estimatedRowHeight = 75.这意味着它调用sizeThatFits单元格上的函数,以确定其高度.这一切都运作良好.
问题是当你重新加载屏幕上的单元格时.例如,向下滚动以显示单元格10,然后重新加载单元格10,工作正常.但是当你开始向上滚动,经过你已经看过的单元格时,它会恢复到每个单元格的estimatedRowHeight,完全忽略sizeThatFits,因此在滚动时跳转.我不可能给出一个准确或"足够好"的估计值,因此这种跳跃不会引人注意,因为我的细胞能够显示一行文字或一个完整的图像 - 这是一个很大的区别.尺寸.
我在这里展示了这个效果:
我在这方面做了很多不同的尝试,使用了heightForRowAtIndexPath,estimatedHeightForRowAtIndexPath等的混合物.我在StackOverflow上尝试了各种建议.似乎没什么用.
我附上了一个非常简单的示例项目,您可以自己尝试:
https://www.dropbox.com/s/8f1rvkx9k23q6c1/tableviewtest.zip?dl=0
值得注意的是 - 如果单元格在重新加载时不在视图中,则不会发生这种情况.如果它高于或低于当前滚动点,则一切都按预期工作.
所以,我有一个UITextField子类,它是自己的Delegate,并在使用键盘快捷键时崩溃.它最大化CPU并且不会出错.如果不按自己的意图分配Delegate,它的工作没有问题.当按原样分配时Delegate,即使不使用任何(可选)方法,它也会崩溃.
亲自尝试一下:
子类UITextField.
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.delegate = self;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
它应该崩溃.
编辑 回溯:
* thread #1: tid = 0x3bb8d, 0x39f14726 libobjc.A.dylib`lookUpImpOrNil + 18, queue = 'com.apple.main-thread, stop reason = signal SIGSTOP
frame #0: 0x39f14726 libobjc.A.dylib`lookUpImpOrNil + 18
frame #1: 0x39f0dcb6 libobjc.A.dylib`class_respondsToSelector + 34
frame #2: 0x39f1d05c libobjc.A.dylib`-[NSObject respondsToSelector:] + 32
frame #3: 0x323b9242 UIKit`-[UITextField respondsToSelector:] + 46
frame …Run Code Online (Sandbox Code Playgroud) 我有一个表视图,它包含一个占位符,当它加载到图像中.加载图像后,我打电话reloadRowsAtIndexPaths:withRowAnimation:.此时,单元格会根据图像的大小更改高度.当发生这种情况时,我希望表视图的内容偏移保持在原位,并且下面的单元格可以进一步向下推,就像您想象的那样.
我得到的效果是滚动视图滚动回到顶部.我不知道为什么会这样,我似乎无法阻止它.把beginUpdates()前和endUpdates()后reloadRows线没有任何影响.
我正在使用estimatedRowHeight,因为我的表视图可能有数百行不同的高度.我也在实施tableView:heightForRowAtIndexPath:.
编辑:我已经设置了一个演示项目来测试这个,并且无可否认我无法获得演示项目来重现这种效果.我会继续努力.
ios ×8
swift ×6
objective-c ×3
xcode ×3
arrays ×2
uitableview ×2
beta ×1
character ×1
emoji ×1
enumeration ×1
iphone ×1
json ×1
read-write ×1
ruby ×1
string ×1
testflight ×1
uitextfield ×1
unit-testing ×1