在GCD上阅读Swift 3 evolution之后,我正在尝试创建调度组.问题是group.notify(queue:当我DispatchQueue.main作为队列传递时不通知,尽管它确实适用于后台队列.
此外,我不确定我的语法是否正确,因为我试图将代码从Swift 2转换为Swift 3.
typealias CallBack = (result: Bool) -> Void
func longCalculations (completion: CallBack) {
let backgroundQ = DispatchQueue.global(attributes: .qosBackground)
let group = DispatchGroup()
var fill:[Int] = []
for item in 0...200 {
group.enter()
if item > 50 {
fill.append(item)
}
group.leave()
}
//Below in the notify argument If I pass `backgroundQ`, it seems to work correctly but not when DispatchQueue.main is passed.
Run Code Online (Sandbox Code Playgroud)
此代码不起作用
group.notify(queue: DispatchQueue.main, execute: {
completion(result: true)
})
}
Run Code Online (Sandbox Code Playgroud)
这工作正常 …
我最近开始学习Haskell.我试图反转包含字符和数字的字符串.字符串将被反转,保持原始位置的数字.
原始字符串="H1AW2J1"
反转= J1WA2H1
我试图遵循我在Swift中使用的模式.
以下是按照上述步骤操作的代码.
reversChars"H1AW2J1"返回"JWAH"
reversedChars = reverse . filter isLetter
Run Code Online (Sandbox Code Playgroud)
索引返回元组.
indexes xs = [(x, elemIndex x xs) | x <- xs]
Run Code Online (Sandbox Code Playgroud)
[('H',Just 0),('1',Just 1),('A',Just 2),('W',Just 3),('2',Just 4),('J' ,只是5),('1',只是1)]
问题
reversedCharselemIndexJust 1为多次出现1 返回相同的索引.对于Int8,有界范围是
minBound :: Int8 -- -128
maxBound :: Int8 -- 127
Run Code Online (Sandbox Code Playgroud)
如果我将两个Int8整数相加
(127 :: Int8) + (10 :: Int8) -- -119
Run Code Online (Sandbox Code Playgroud)
为什么它不显示超出范围的错误?
如果创建数据类型并添加Bounded实例:
newtype Boost = Boost Int
deriving (Eq, Show)
instance Num Boost where
(Boost a) + (Boost b) = Boost (a+b)
instance Bounded Boost where
minBound = Boost 1
maxBound = Boost 10
(Boost 10) + (Boost 12) -- Boost 22
Run Code Online (Sandbox Code Playgroud)
显然,它的行为不像Int8,那么如何为自定义数据类型创建一个有界实例?