小编Nil*_*wal的帖子

在Swift中使用dispatch_once单例模型

我正在尝试找出适合在Swift中使用的单例模型.到目前为止,我已经能够得到一个非线程安全模型:

class var sharedInstance: TPScopeManager {
    get {
        struct Static {
            static var instance: TPScopeManager? = nil
        }

        if !Static.instance {
            Static.instance = TPScopeManager()
        }

        return Static.instance!
    }
}
Run Code Online (Sandbox Code Playgroud)

在Static结构中包装单例实例应允许单个实例在没有复杂命名方案的情况下不与单例实例发生冲突,并且它应该使事情变得相当私密.显然,这个模型不是线程安全的,所以我尝试将dispatch_once添加到整个事情中:

class var sharedInstance: TPScopeManager {
    get {
        struct Static {
            static var instance: TPScopeManager? = nil
            static var token: dispatch_once_t = 0
        }

        dispatch_once(Static.token) { Static.instance = TPScopeManager() }

        return Static.instance!
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译器错误dispatch_once:

无法将表达式的类型'Void'转换为'()'类型

我已经尝试了几种不同的语法变体,但它们似乎都有相同的结果:

dispatch_once(Static.token, { Static.instance = TPScopeManager() })
Run Code Online (Sandbox Code Playgroud)

dispatch_once使用Swift 的正确用法是什么?我最初认为问题出在块中,因为dispatch_once错误消息,但我看的越多,我认为可能是获得() …

singleton dispatch swift

563
推荐指数
10
解决办法
13万
查看次数

如何在UITableView中设置分隔符的整个宽度

所以我有一个UITableView,其中分隔符没有全宽.它在左侧前10像素结束.我在viewDidLoad中玩这个代码

self.tableView.layoutMargins = UIEdgeInsetsZero;
Run Code Online (Sandbox Code Playgroud)

也可以在故事板中选择自定义或默认选择器.现在,所有填充的单元格都没有全宽度选择器,但是空单元格具有全宽度.

我怎么能解决这个问题呢?

谢谢你的帮助

iphone objective-c uitableview ios

142
推荐指数
13
解决办法
8万
查看次数

如果单个元素解码失败,Swift JSONDecode解码数组将失败

在使用Swift4和Codable协议时,我遇到了以下问题 - 看起来没有办法允许JSONDecoder跳过数组中的元素.例如,我有以下JSON:

[
    {
        "name": "Banana",
        "points": 200,
        "description": "A banana grown in Ecuador."
    },
    {
        "name": "Orange"
    }
]
Run Code Online (Sandbox Code Playgroud)

还有一个Codable结构:

struct GroceryProduct: Codable {
    var name: String
    var points: Int
    var description: String?
}
Run Code Online (Sandbox Code Playgroud)

解码这个json时

let decoder = JSONDecoder()
let products = try decoder.decode([GroceryProduct].self, from: json)
Run Code Online (Sandbox Code Playgroud)

结果products是空的.这是可以预料到的,因为JSON中的第二个对象没有"points"键,而struct中points不是可选的GroceryProduct.

问题是如何允许JSONDecoder"跳过"无效对象?

arrays json swift swift4 codable

86
推荐指数
8
解决办法
4万
查看次数

Xcode 7 iOS 9 UITableViewCell分隔符插入问题

这不是一个问题,而是我面临的问题的解决方案.

在Xcode 7中,当应用程序在iPad设备上的iOS 9上运行时,UITableView单元格会在tableview的左侧留下一些边距.将设备旋转到横向会增加边距.

我找到的解决方案是:

将"cellLayoutMarginsFollowReadableWidth"设置为NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
Run Code Online (Sandbox Code Playgroud)

因为,此属性仅在iOS 9中可用.因此,您必须设置条件来检查iOS版本,否则它将崩溃.

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_1)
{
    self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
}
Run Code Online (Sandbox Code Playgroud)

希望它对其他人有所帮助.

objective-c uitableview ios9 xcode7

68
推荐指数
2
解决办法
1万
查看次数

告诉git可以删除未跟踪的文件

可能重复:
如何从git工作副本中删除未跟踪的文件?

是否有可能告诉git删除未跟踪文件?主要是类似于重置的东西?

例:

git checkout -- index.php <-- revert my file
git checkout -- master <-- this would revert the entire repo back to the last commit on master, removing (deleting) any and all untracked files as well as reverting committed ones.
Run Code Online (Sandbox Code Playgroud)

我知道这对shell来说是微不足道的,但我想知道这是否可以在Git中完成?

git version-control

59
推荐指数
2
解决办法
2万
查看次数

如何在NSArray上进行自然排序?

我有一个对象数组,我需要按照"标题"键排序.它目前正在工作,虽然它使用的是ASCII排序而不是自然排序.标题是文件名,所以它们看起来像这样:

file1
file2
file3
...
file10
file11
file12

正如你所料,我得到了:

file1
file10
file11
file12
file2
file3
...

有没有人知道NSArray排序功能内置了一种方法来获得这种自然排序而不是字母排序?我发现了一些通用算法,但我希望有一些内置的...

sorting cocoa objective-c

36
推荐指数
2
解决办法
6144
查看次数

在iPhone App中使用自定义字体

可能重复:
我可以在iPhone应用程序中嵌入自定义字体吗?

如何在我的iPhone应用程序中自定义字体?可能吗?如何为标签提供此自定义字体?有谁能建议一个好的方法?

我试图在我的应用程序中添加MYRIADPRO-SEMIBOLD.OTF字体.

而代码是

UIFont *customFont = [UIFont fontWithName:@"MYRIADPRO-SEMIBOLD" size:35]; 
titleLbl.font = customFont; 
Run Code Online (Sandbox Code Playgroud)

Plist是

在此输入图像描述

iphone fonts ios

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

在Jift中将JSON转换为NSData,将NSData转换为JSON

我在将一个JSON元素转换为一个元素时遇到了问题NSData,而一个NSData变量又回到JSON了Swift中.

首先,我想提取encryptedData以下JSON数据的元素:

{
    "transactionID" : 12345,
    "encryptedData" : [-67,51,-38,61,-72,102,48]
}
Run Code Online (Sandbox Code Playgroud)

进入一个NSData encryptedData变量但似乎无法做到这一点.我SwiftyJSON用来解析JSON如下:

let list: Array<JSON> = json["encryptedData"].arrayValue!
Run Code Online (Sandbox Code Playgroud)

但这给了我一个ScalarNumber数组,我不知道如何存储到一个NSData对象中.

其次,我想JSON从同一个NSData对象生成:

let jsonObject = [
    "transactionID" : 12345,
    "encryptedData" : encryptedData
]
Run Code Online (Sandbox Code Playgroud)

但是NSData encryptedData对象没有转换为[-67,51,-38,61,-72,102,48],它似乎使JSON字符串无效.

有任何想法吗?

xcode json nsdata swift

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

如何优雅地比较Swift中的元组?

我有2个不同类型的元组(Double,Double):

let tuple1: (Double, Double) = (1, 2)
let tuple2: (Double, Double) = (3, 4)
Run Code Online (Sandbox Code Playgroud)

我想使用简单的if语句比较它们​​的值.就像是:

if (tuple1 == tuple2) {
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

找不到接受提供的参数的'=='的重载

我目前的解决方案是这样的功能:

func compareTuples <T: Equatable> (tuple1: (T, T), tuple2: (T, T)) -> Bool {
    return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1)
}
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢这个解决方案,并寻找更优雅的东西.我已经尝试编写扩展但不能使其适用于元组.你有解决这个问题的好方法吗?

comparison tuples swift

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

如何使用计时器自动滚动UIScrollView

我有scrollview来显示图像.我需要计时器每5秒一个接一个地显示图像.如何使用计时器启动UIScrollView事件以在5秒后移动?

iphone uiscrollview

18
推荐指数
2
解决办法
2万
查看次数