相关疑难解决方法(0)

UISearchBar取消按钮颜色?

当我将UISearchBar放入Interface Builder中的视图中,并将其样式更改为Black Opaque时,取消按钮保持不合适的蓝色/灰色并且不会变为黑色.

如何将取消按钮设为黑色?

编辑:它确实像这样工作:

// Assume a UISearchBar searchBar.
NSArray *subviews = [searchBar subviews];

// The index depends on how you configure the searchBar.
UIButton *cancelButton = [subviews objectAtIndex:3];

// Set the style to "normal" style.
[cancelButton setStyle:0];
Run Code Online (Sandbox Code Playgroud)

但该setStyle:方法来自私有框架,因此在向Apple提交应用程序时可能会出现问题.

cocoa-touch background-color uibarbuttonitem uisearchbar ios

38
推荐指数
5
解决办法
3万
查看次数

如何在Swift中捕获"索引超出范围"?

我真的想在我的Swift代码中使用更简单的经典try catch块,但我找不到任何可以做到的东西.

我只需要:

try {
// some code that causes a crash.
}
catch {
// okay well that crashed, so lets ignore this block and move on.
}  
Run Code Online (Sandbox Code Playgroud)

这是我的困境,当TableView重新加载新数据时,一些信息仍然存在于RAM中,它调用didEndDisplayingCell一个带有新空数据源的tableView崩溃.

所以我经常抛出异常 Index out of range

我试过这个:

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

    do {
        let imageMessageBody = msgSections[indexPath.section].msg[indexPath.row] as? ImageMessageBody
        let cell = tableView.dequeueReusableCellWithIdentifier("ImageUploadCell", forIndexPath: indexPath) as! ImageCell
        cell.willEndDisplayingCell()
    } catch {
        print("Swift try catch is confusing...")
    }
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

func tableView(tableView: UITableView, didEndDisplayingCell …
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift

32
推荐指数
3
解决办法
3万
查看次数

无法在Swift 3的Collection扩展中使用indices.contains()

我在Swift 2.3中写了以下扩展:

extension CollectionType {
    /// Returns the element at the specified index iff it is within bounds, otherwise nil.
    subscript (safe index: Index) -> Generator.Element? {
        return indices.contains(index) ? self[index] : nil
    }
}
Run Code Online (Sandbox Code Playgroud)

但事实证明,Swift 3.0没有contains()功能.相反,它为我提供了以下语法:

indices.contains(where: { (<#Self.Indices.Iterator.Element#>) -> Bool in
    <# code ??? what should it do??? #>
})
Run Code Online (Sandbox Code Playgroud)

问题是我不知道它在块内应该包含什么.请帮忙迁移它吗?

swift swift3 swift2.3

10
推荐指数
1
解决办法
2365
查看次数

修改数组最后一个元素的优雅方式是什么?

我有一组自定义类对象,我需要修改最后一个元素的属性。我知道“last”和“first”是作为getter实现的,但是,这对我没有帮助:)除了通过索引访问最后一个元素之外,还有其他方法吗?

更新

protocol DogProtocol {

  var age: Int {get set}
}

class Dog: DogProtocol {
  var age = 0
}

var dogs = Array<DogProtocol>()
dogs.append(Dog())
dogs.last?.age += 1 // Generates error in playground: left side of mutating operator isn't mutable: 'last" is a get-only property
Run Code Online (Sandbox Code Playgroud)

ios swift

9
推荐指数
3
解决办法
5560
查看次数

为什么 Swift 中的数组索引不返回可选值?

当访问字典时,例如[String: Any],结果类型为Optional(Any)

对 的数组进行索引时[Any],结果类型为Any,并且调用可能会引发致命错误。

这种差异有什么原因吗?

guard let使用、if let?和 来分支执行真是太好了??,但是您必须将数组索引包装在if data.count <= index.

arrays indexing swift swift4

4
推荐指数
1
解决办法
717
查看次数

嵌套数组错误

我知道这是一个非常新手的问题,但它已经把我扔了好几天,我似乎无法找到一个我真正理解的解决方案.

我正在尝试创建一个嵌套数组来存储纬度和经度,但是Xcode/playground会抛出一个EXC_BAD_INSTRUCTION错误.

我想声明,初始化和打印数组的内容.我究竟做错了什么?

var arrayLocations:[[Float]] = []

arrayLocations[0] = [27.1750199, 78.0399665]

print("\(arrayLocations[0][0]) and \(arrayLocations[0][1])")
Run Code Online (Sandbox Code Playgroud)

swift

1
推荐指数
1
解决办法
87
查看次数

由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArray0 objectAtIndex:]:索引 2 超出空 NSArray 的范围

日志中的错误:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[ NSArray0 objectAtIndex:]:索引 2 超出空 NSArray 的范围”*** 第一个抛出调用堆栈:( 0 CoreFoundation 0x000000010fdd8b0b __exceptionPreprocess + 171 1 libobjc.A. dylib 0x00000001143a6141 objc_exception_throw + 48 2 CoreFoundation 0x000000010fdf027d -[__NSArray0 objectAtIndex:] + 93 3 DropInn 0x000000010d598fc4 _TFC7DropInn21ListingViewController9tableViewfTCSo11UITableView 14didSelectRowAtV10Foundation9IndexPath_T_ + 5972 4 DropInn 0x000000010d599837 _TToFC7DropInn21ListingViewController9tableViewfTCSo11UITableView14didSelectRowAtV10Foundation9IndexPath_T_ + 87 5 UIKit 0x00000001122b3dcd -[UI TableView _selectRowAtIndexPath:动画:scrollPosition:notifyDelegate:] + 1763 6 UIKit 0x00000001122b3fe3 -[ UITableView _userSelectRowAtPendingSelectionIndexPath:] + 344 7 UIKit 0x00000001121697f3 _runAfterCACommitDeferredBlocks + 318 8 UIKit 0x00000001121567bc _cleanUpAfterCAFlushAndRunDeferredBlocks + 532 9 UIKit 0x000000011218828c _afterCACommitHandler + 137 10 CoreFoundation …

nsarray ios nsrangeexception swift

1
推荐指数
1
解决办法
8397
查看次数

如何在 Swift 3 中转置不等数组长度的矩阵

我的数组是 [[Int]] 类型

array = [[1,2,3],
         [4,5,6],
         [7,8,9,10],
         [11,12,13],
         [14,15,16]]
Run Code Online (Sandbox Code Playgroud)

我希望转置结果为:

array = [[1,4,7,11,14],
         [2,5,8,12,15],
         [3,6,9,13,16],
         [0,0,10,0,0]]
Run Code Online (Sandbox Code Playgroud)

如何将 0 填充到没有相等行或列映射的数组。

我希望转置适用于具有不相等映射元素的行和列。请帮忙。

transpose padding multidimensional-array swift3

1
推荐指数
1
解决办法
1347
查看次数

检查数组CAN是否在给定索引处具有元素的快速方法?

为了防止潜在的崩溃,每当我尝试访问阵列中的特定元素时,我通常会进行一些安全检查.我才意识到我已经厌倦了这样做.有没有办法快速安全地完成?

var array:[String] = [/*Filled with stuff*/]
func someFunc(someIndex:Int){

    //This is unsafe. It will crash if index is negative or larger than count.
    let text = array[someIndex]

    //This is completely safe, but boring.
    let text:String
    if someIndex >= 0 && someIndex < array.count{
        text = array[someIndex] 
    }else { return }

    //What I want is something like this:
    let text = array.hasElement(at: someIndex) ? array[someIndex] : return
    //I know, I can't really put a 'return' in a statement like this, but …
Run Code Online (Sandbox Code Playgroud)

arrays ios swift

1
推荐指数
1
解决办法
84
查看次数